1. 读写修饰符 readwrite | readonly
-
readwrite
:系统为我们创建这个属性的setter
和getter
方法 -
readonly
:系统只为我们创建一个getter
方法,不会创建setter
方法
2. setter 相关修饰符 assign | retain | copy
-
assign
:表示直接赋值,用于基本数据类型和C数据类型,不会牵涉到内存管理; -
retain
:针对对象进行内存管理; -
copy
:主要用在NSString类型,表示复制内容;
系统默认属性是assign
。retain
是指针的复制,copy
是内容的复制、
3. 原子性修饰符 atomic | nonatomic
-
atomic
:表示是线程安全的; -
nontomic
:表示是非线程安全的,使用此属性性能会提高一些,系统默认是atomic
。
4. getter 和 setter 修饰符
@property (getter=getMethodName, setter=setMethodName) Object *obj;
这两个属性修饰符用于设置自定义生成的 setter
和 getter
方法名,使用之后将不再使用系统默认的setter
和 getter
方法名。
@protocol 和 category 中如何使用 @property
- 在
protocol
中使用property
只会生成setter
和getter
方法声明,我们使用实行的目的,是希望遵守我协议的对象能实现该属性。 -
category
使用@property
也只会生成setter
和getter
方法声明,如果我们真的需要给category
增加属性的实现,需要借助于运行时的两个参数:
objc_setAssociatedObject
objc_getAssociatedObject