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是内容的复制。
网友评论