@property
本质 = ivar (实例变量) + getter (取方法) + setter (存方法)
“属性”(property)有两大概念:实例变量(ivar)、存取方法(getter + setter)
@synthesize
编译器期间,让编译器自动生成getter/setter方法。
当有自定义的存或取方法时,自定义会屏蔽自动生成该方法
@dynamic
告诉编译器,不自动生成getter/setter方法,避免编译期间产生警告
然后由自己实现存取方法或存取方法在运行时动态创建绑定
注意:
在xcode4.4(ios6)之后,系统会自动让编译器生产getter和setter方法,无需手动添加@synthesize
属性修饰符
assign:
简单赋值,不更改引用计数。一般用于基础类型的数据(NSInteger)其在MRC下是默认值。
copy:会拷贝传入的对象(即创建一个引用计数为1的新对象,但是内容与传入对象相同)并把型的对象赋值给实例变量。常用与NSString,Block
retain:
释放旧对象,并使传入的新对象引用计数+1。此属性只能用于NSObject及其子类,而不能用于CoreFoundation。
strong:
强引用,类似于retain。要求保留传入的对象,并放弃原有对象。一个对象只要被至少一个强引用指向,则其不会被释放,而当没有强引用指向时则会被释放。其在ARC下是对象类型的默认值。
weak:
弱引用,要求不保留传入的属性(既不会使传入的对象引用计数+1)。类似于assign,但与assign不同的是,当它们指向的对象被释放后,weak会被自动置为nil,而assign则不会,所以assign会导致“野指针”的出现,weak可以避免悬空指针。
unsafe_unretained:
其实质等同于assign。与weak的区别就是指向的对象如果被释放,其不会被置为nil,而导致悬空指针的出现。它是ARC模式下非对象属性的默认值。
网友评论