4. @property 后面可以有哪些修饰符

1.读写性修饰符:readwrite | readonly
readwrite:表明属性可读可写,系统自动创建属性setter方法和getter方法;
readonly:表明属性只能读不能写,系统只创建getter方法,不会创建setter方法;
2.setter相关修饰符:assign | retain | copy
—-setter相关修饰符表明setter方法应该如何实现—-
assign:表示直接赋值,用于基本数据类型(NSInteger和CGFloat)和C语言数据类型(int, float, double, char等),另外id类型,这个修饰符不会牵涉到内存管理。但是如果是对象类型,使用此修饰符则可能会导致内存泄漏或EXC_BAD_ACCESS错误;
retain:针对对象类型进行内存管理。如果对基本数据类型使用,则Xcode直接报错。当给对象类型使用此修饰符时,setter方法会先先将旧对象属性release掉,再对新对象进行一次赋值并进行一次retain操作;
copy:主要用NSString类型,表示复制内容。
系统默认属性assign。retain是指针的复制,copy是内容的复制。
3.原性修饰符:atomic | nonatomic
atomic:表示线程安全的;
nonatomic:表示非线程安全的,使用此属性性能会提高一些。
系统默认atomic。
4.getter和setter修饰符
@property(getter = getMethodName, setter = setMethodName) Object *obj;
这两个属性修饰符用于设置自定义getter方法名和setter方法名,使用之后将不再使用系统默认getter方法名和setter方法名。

在@property修饰符中可以出现多个修饰符,分别用逗号分隔,但是在上述修饰符,1、2、3组中的属性分别中能出现一个,4组中可以同时出现。

Xcode4.2(iOS sdk4.3版本)和以前的版本用retain和assign
Xcode4.3(iOS 5版本)之后有了ARC,用strong和weak
assign:用于非指针变量。用于基础数据类型(NSInteger, CGFloat)和C语言数据类型(int, float, double, char等),还有id类型。
记住:前面不需要加*用assign
retain:用于指针变量。一般用于字符串(NSString, NSMutableString), 数组(NSArray, NSMutableArray),字典对象, 视图对象(UIView), 控制器对象(UIViewController)等
strong类似于retain,weak类似于assign

简单记忆:
使用assign: 对基础数据类型(NSInteger, CGFloat)和C语言数据类型(int, float, double, char等), 还有id类型;
使用copy: 对NSString类型;
使用retain: 对其它NSObject和其子类。

你可能感兴趣的:(iOS-OC)