@property和点语法
声明了@property(或者setter、getter),才能使用点语法
@property (nonatomic, assign) int age;//等同于声明setter、getter方法
@synthesize age; //等同于实现setter、getter方法
(6.0以后写了@property会自动生成@synthesize)
/————————————————————————————————/
@property的参数
/————————————————————————————————/
(assign , retain , copy , readonly , readwrite , atomic , nonatomic等)
参数一 (缺省 atomic):
atomic 原子操作,多线程加锁 同一时间只能允许一个线程访问该属性(缺省参数,耗费系统资源)
nonatomic 非原子操作,不加锁,提高效率(不使用多线程的时候用这个)
————atomic是Objc使用的一种线程保护技术,是防止在写未完成的时候被另外一个线程读取,造成数据错误。
参数二(缺省 readwrite):
readonly 只读,只能调用getter方法不能调用setter方法
readwrite(缺省参数)可读可写
参数三(重点):
ARC(Automatic Reference Counting)自动管理内存,非ARC手动管理内存
c类型(基础数据类型) int long float double char NSInteger CGFloat…id
oc类型 NSString NSData NSArray NSDictionary …
copy与retain的区别
retain 是指针拷贝,copy 是内容拷贝。
————————————————————————————————————
weak与strong是由ARC新引入的对象变量属性
xcode 4.2(ios sdk4.3和以下版本)和之前的版本使用的是retain和assign,是不支持ARC的。xcode 4.3(ios5和以上版本)之后就有了ARC,并且开始使用
————————————————————————————————————
点语法书写格式
@interface T : NSObject {
NSString * _name;
}
-(void)setName:(NSString *)name;
-(NSString *)name;
(上两句等同于@property (nonatomic, assign) name;)
/*
点语法(相当于setter、getter,左值setter,右值getter)
*/
调用点语法函数
student.name = @"Joe"; //student.name是调用setAge方法的简写
NSLog(@"My name is %@", student.name); //调用age方法(getter方法)的简写