@property后面都有哪些修饰符

1.readwrite/readonly  

readwrite:读写,系统会自动创建setter和getter方法。

readonly:只读,系统只会创建getter方法,不会创建setter方法。

2.retain/assign  strong/weak

Xcode4.2(iOS4.3及以下版本)和以下版本使用retain和assign,Xcode4.3(iOS5和以上版本)和之后的版本使用strong和weak,strong类似retain,weak类似assign。

3.原子性修饰符:atomic/nonatomic

atomic:提供多线程安全,在多线程的环境下,原子操作是必要的,否则可能引起错误的结果,防止写未完成,被另一个线程读取,造成数据错误,但是特别耗费系统资源。使用atomic,则setter方法变成:

{lock}

if (property != newValue) {

[property release];

property = [newValue retain];

}

{unlock}

nonatomic:禁止多线程,变量保护,提高性能。

4.getter和setter相关修饰符,assign/retain/copy

assign:用于基本类型(NSInteger和CGFloat)和C数据类型(char,int,float,double等),还有id类型。assign这个修饰符不会牵扯到内存管理,如果是对象类型,使用该修饰符,就会导致内存泄漏或者报EXE_BAD_ACCESS错误。

retain:用于对象类型,如果用于基本类型会报错,在使用retain的时候,setter方法会先将旧的对象release掉,然后在对新的对象赋值并进行一次retain操作。

copy:主要用在NSString类型,表示复制内容。block用copy。

系统默认是assign,retain是指针的复制,copy是内容的复制。

注:strong类似retain,weak类似assign

weak和assign的区别:assign是指针赋值,不对其使用计数进行操作的时候,需要置nil,否则会产生野指针;weak不会,一旦不使用了,就自动释放了。

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

推荐阅读更多精彩内容