您的位置:首页 > 运维架构

2015.6.30 第二堂 property

2015-06-30 22:31 316 查看
本节主要学习了用property声明变量的set get方法,效率正常。

小结:

技术瞬息万变,要学会推翻和改变之前的看法。

注:.h文件声明的时成员变量和方法。 (自己的错误读法:声明类和方法)

知识点一:property

关于@property的属性变量,有以下三个功能:

1、声明了setter方法 2、声明了getter方法 3、声明了一个变量,变量本身的名字是__name

举例:

在.h文件中完成对set和get方法的声明 @property (nonatomic,strong) NSString *name;

在.m文件中完成对set和get方法的实现 @synthesize name=_name  // 随着更新 property已自动完成实现 此句可省略

@property 大大简化了步骤

@property (nonatomic,strong) NSString *name;

等同于

-(void)setName:(NSString *)name;

-(NSString *)name;

总之,一句property代替了set、get方法的声明,声明了一个变量,也不用实现了。

知识点二:property的关键词理解

nonatomic:非原子操作 线程不安全 (无锁机制)效率高 (一般都写这个)

atomic:原子操作 线程安全(有锁机制) 效率低(默认)

OC对象类型都为strong/retain

strong:声明强引用 引用计数+1 retainCount

weak:弱引用 不引用

retain:strong同样的功能

copy:复制一个同样的对象(创建一片内存,将对象的内容拷贝到这片独立的内存)(拷贝的多了占用很多内存,所以不好)

readWrite:默认-可读(有getter方法) 可写(setter)

readOnly:只读(同上)

setter:使用方式setter=setCatName:

getter:使用方式getter=getCatName:

assign:C语言的基本数据类型

举例:

@property (nonatomic,strong) NSString *address;

@property (nonatomic,assign) float age;

知识点三:关于[]调用 和.

Cat *jfm=[[Cat alloc]init];

jfm.address=@"桃园";

 等同于 [jfm setAddress:@"桃园"];         //set方法需要写出 方法名:参数

NSLog(@"%@ %@",jfm.address);

等同于NSLog(@"%@ %@",[jfm name]);       // get方法只需要直接写参数名name就可以了

.h中内容供参考:@property (nonatomic,strong)NSString *name;
//- (void)setName:(NSString *)name;
//- (NSString *)name;

@property (nonatomic,
strong) NSString *address;
//- (void)setAddress:(NSString *)address;
//- (NSString *)address;

参考资料:

实例变量和属性的区别:http://zhidao.baidu.com/question/1960023972532644380.html?fr=iks&word=oc%B3%C9%D4%B1%B1%E4%C1%BF%D4%F5%C3%B4%CA%B5%CF%D6&ie=gbk

oc中的Set函数、Get函数、点语法和类方法等http://bbs.itheima.com/thread-139714-1-1.html

附:实验代码

//
// main.m
// Review
//
// Created by PengXiaodong on 15/6/30.
// Copyright (c) 2015年 PengXiaodong. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Cat.h"

int main(int argc, const char * argv[]) {
@autoreleasepool {
//实例方法 类方法
Person *pxd = [[Person alloc] init];
[pxd setAge:28];
NSLog(@"%d", [pxd age]);

//创建一个字符串对象
//NSString *name = [[NSString alloc] initWithString:@"iOS开发"];
Cat *jfm = [[Cat alloc] init];
jfm.name = @"西南大学"; //调用name变量的set方法
[jfm setName:@"西南大学"];

jfm.address = @"橘园";
[jfm setAddress:@"橘园"];

NSLog(@"%@ %@", jfm.name, jfm.address);//调用get方法
NSLog(@"%@ %@", [jfm name], [jfm address]);//调用get方法
}
return 0;
}

//
//  Cat.h
//  Review
//
//  Created by PengXiaodong on 15/6/30.
//  Copyright (c) 2015年 PengXiaodong. All rights reserved.
//

#import <Foundation/Foundation.h>
/*
旧的变量声明的方式存在一个弊端
1. 繁琐 每一个变量都需要提供一个set方法 get方法 同时需要去实现这个两个方法

解决上面的问题
property-声明了变量的set get方法
synthesize-实现了set get方法
*/

/*
@property属性变量
1. 声明了setter方法
2. 声明了getter方法
3. 声明了一个变量 这个变量本身的名字是 _name
- (void)setName:(NSString *)name;
- (NSString *)name;
*/

/*
关键字
nonatomic:非原子操作 线程不安全(没有加锁 解锁机制) 效率高
atomic:原子操作 线程安全(有加锁 解锁机制) 默认     效率低

->OC对象类型 strong/retain
strong:声明强引用 引用计数+1 retainCount
weak: 弱引用  不引用
retain:strong同样的功能
copy:复制一个同样的对象(创建一片内存,将对象的内容拷贝到这片独立的内存)

readWrite:默认-可读(有getter方法)可写(有setter方法)
readOnly:只能读(只有getter方法 没有setter方法)

setter:  使用方式setter=setCatname:
getter:  使用方式getter=getCatName

assign:  C语言的基本数据类型
*/
@interface Cat : NSObject

@property (nonatomic, strong) NSString *name;
//- (void)setName:(NSString *)name;
//- (NSString *)name;

@property (nonatomic, strong) NSString *address;
//- (void)setAddress:(NSString *)address;
//- (NSString *)address;

@property (nonatomic, assign) float age;

@end

//
//  Cat.m
//  Review
//
//  Created by PengXiaodong on 15/6/30.
//  Copyright (c) 2015年 PengXiaodong. All rights reserved.
//

#import "Cat.h"

@implementation Cat
//@synthesize name = _name;//完成了set方法 get方法的实现

@end

//
//  Person.h
//  Review
//
//  Created by PengXiaodong on 15/6/30.
//  Copyright (c) 2015年 PengXiaodong. All rights reserved.
//

#import <Foundation/Foundation.h>

/*
旧的变量声明的方式存在一个弊端
1. 繁琐 每一个变量都需要提供一个set方法 get方法 同时需要去实现这个两个方法

解决上面的问题
property-声明了变量的set get方法
synthesize-实现了set get方法
*/
@interface Person : NSObject{
//声明变量
int age;//成员变量
}

//定义方法
//set方法 设置变量的值
- (void)setAge:(int)aAge;

//get方法 后去变量的值
- (int)age;

@end

//
//  Person.m
//  Review
//
//  Created by PengXiaodong on 15/6/30.
//  Copyright (c) 2015年 PengXiaodong. All rights reserved.
//

#import "Person.h"

@implementation Person

- (void)setAge:(int)aAge{
age = aAge;
}

- (int)age{
return age;
}
@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: