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

@property 中的关键字

2016-01-29 16:20 447 查看

一、@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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  property