@property是什么?
属性: 声明一个属性,则系统会默认给生成读取函数(set,get),可以通过点运算符来默认调用这个存取方法,并且会产生一个以_开头的成员变量。
属性就是与属性相对应的成员变量的值。在使用属性的时候,其实本质也是对成员变量的值进行操作。
成员变量:则是单纯的一个变量,不会有连带的存取方法。
assign
用于非指针变量。用于基础数据类型(如NSInteger)和C数据类型(int,float,double,char等),另外还有id。
weak
对对象的弱引用,不增加对象的引用计数,也不持有对象,当对象消失后指针自动指向nil,所以这里也就防止了野指针的存在。
strong
对对象的强引用,会增加对象的引用计数,如果指向了一个空对象,会造成野指针,平常我们用得最多的应该也是strong了。
copy
建立一个引用计数为1的新对象,赋值时对传入值进行一份拷贝,所以使用copy关键字的时候,你将一个对象复制给该属性,该属性并不会持有那个对象,而是会创建一个新对象,并将那个对象的值拷贝给它。而使用copy关键字的对象必须要实现NSCopying协议
retain
该属性在赋值的时候,先release之前的值,然后再赋新值给属性,引用再加1。
@synthesize
@synthesize 的作用:是为属性添加一个实例变量名,或者说别名。同时会为该属性生成 setter/getter 方法
@dynamic
@dynamic告诉编译器,属性的setter与getter方法由用户自己实现,不自动生成。
用此关键字声明的属性,如果没有自己实现setter和getter方法,编译的时候没有问题,如果调用setter和getter的时候,就会因为缺少响应方法而崩溃,这就是所谓的动态绑定。
网友评论