1. @property:
@Property是声明属性的语法,声明一个属性后,系统帮我们生成setter,getter和_var。
1.所有权属性修饰符:
strong:强引用,修饰对象。
retain: 强引用,修饰对象。
weak:弱引用,对象销毁变量会置为nil。
copy: 强引用,会copy对象。
unsafe_unretained:弱引用,对象销毁会变成野指针。
assign:修饰基础数据类型,如修饰对象则同unsafe_unretained。
2.与原子性相关
atomic:对setter方法加锁,setter方法是线程安全的,但对象不是线程安全的。
nonatomic:不对setter方法加锁。
3.权限相关
readwrite: 可读可写(系统自动为我们生成setter和getter方法)。
readonly:只能读,不能写(系统只生成了getter方法,没有生成setter方法)。
2. @sythesize
1.@synthesize是为属性添加一个实例变量名,或者说别名。同时会为该属性生成 setter/getter 方法。如果不写,默认是@synthesize var = _var;
2.当在 protocol 中声明并实现属性时。协议中声明的属性不会自动生成setter和getter,需要使用@synthesize生成setter和getter。
3. @dynamic
@dynamic告诉编译器:属性的 setter 与 getter 方法由用户自己实现,不自动生成。(当然对于 readonly 的属性只需提供 getter 即可)。
网友评论