iOS属性的关键字

常用属性关键字:natomic、nonatomic、assign、weak、strong、retain、copy、unsafe_unretained、readwrite、readonly

另外还有一些修饰关键字__weak、__strong、__block、@synthesize、@dynamic

其中strong、weak是ARC环境下才使用,retain是MRC环境下才使用。

natimic:原子操作,默认关键字,只在其相关的setter和getter方法时有加锁安全机制,其他线程安全不负责;

nonatimic:非原子操作,没有加锁安全机制,但是访问会提高效率;

assign:主要用来修饰基本数据类型、枚举、结构体,MRC情况下的OC对象为避免循环引用也可用assign,不增加引用计数(有点类似ARC下的weak);

weak:ARC情况下使用,修饰OC对象,不增加引用计数,与assign不同的是对象销毁时会将对应的指针变量置nil;

strong:ARC情况下使用,修饰OC对象,不会生成新的内存地址,增加引用计数;

retain:MRC情况下使用,修饰OC对象,不会生成新的内存地址,增加引用计数,与strong类似,但需在dealloc中release一次;

copy:修饰不可变类型对象和block,会生成新的内存地址,对原对象的引用计数不会发生变化;

unsafe_unretained:等同于weak,但是对象销毁时不会将对应指针变量置nil;

readwrite:默认关键字,会自动生成对应的setter和getter方法;

readonly:只会自动生成getter方法,一般是供外界只读,不可修改;

__weak:ARC情况下使用,弱引用对象,避免循环引用,主要用在block的情况下;

__strong:ARC情况下使用,强引用对象,一般与__weak一起使用,防止在block里面用__weak修饰的对象过早被释放;

__block:允许block改变外部传进的变量值;

@synthesize:可对属性的成员变量进行重命名;
比如

@property (nonatomic, copy) NSString *string;

用@synthesize string = abcd修饰,那么只有名为abcd的成员变量,没有_string的成员变量

@dynamic:告诉编译器,属性的setter方法和getter方法由用户自己实现,不自动生成,若是用户没有自己实现,那么在运行到该属性的点语法时会由于找不到setter和getter方法而导致崩溃。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容