@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不会,一旦不使用了,就自动释放了。

你可能感兴趣的:(@property后面都有哪些修饰符)