一、@property(nonatomic,copy) NSString *myName;
其中nonatomic、copy都是关键字,关键字分为三类:
1. 原子性
1.1 atomic(默认):线程安全。
1.2 nonatiomic:可被多线程访问,不安全。在单线程或明确只有一个线程时使用。
2. 访问器控制
2.1 readwrite(默认):
同时拥有setter和getter方法。
2.2 readonly:只有getter方法。
3. 内存管理
3.1 assign(默认):用于值类型,单纯值复制,如int,float,double和CGFloat等。delegate等不存在所有权关系的对象。
3.2 retain:意味着实例变量获取传入参数的所有权。表现在调用setter方法时,会先释放release、然后将参数retain之后传给它。
3.3 strong:类似retain,强引用
3.4 weak:weak跟assign效果类似,但weak在对象回收之后自动设置nil。低版本使用unsafe_unretained代替。
3.5 copy:拷贝一个副本。
二、初始化readonly属性
既然readonly只生成getter方法,那么怎么初始化赋值呢。
如:
@property(nonatomic,readonly)NSString *myName;
@synthesize myName;//需写在@implementation之后。
myName = @”*******”;
或不写@synthesize,直接使用_myName。
通过_myName进行存取的话是不会调用该变量的setter或者getter方法的,声明的readonly也就不会起作用,而通过self. myName调用的话是会调用setter(无效)或者getter方法的,这样readonly也就会起作用。
其实在申明@property时,系统会创建@synthesizemyName = _myName