property 理解

  • @property 声明一个变量,格式就是@property (原子性,存储特性,存取特性,能否为空)变量类型 变量名

  • @synthesize 经常与 @property 搭配使用,声明在@implement 块中,表示自动合成getter和setter方法,同时可以为变量声明一个内部使用的别名,以区分setter和getter方法,别名外部不可见在这里插入图片描述

  • 有几种情况下@property不会为你合成变量

    • 如果自己实现了setter和getter方法,而且没有用@synthesize 为变量生成别名,@property就不会为你自动合成带有下划线为开头的变量,如下
      在这里插入图片描述
    • 为readonly属性重写了getter方法
      在这里插入图片描述

@dynamic 说明不用编译器生产这两个方法,不合成带有下划线的成员变量,由开发者自己实现
如果不进行实现却进行了调用的话,编译时期不会报错,但是执行期间就会报错
在这里插入图片描述

使用self.name 的形式,会调用 name 的 getter 方,注意代码中产生死循环,死循环写法

  1. 原子性 atomic 和 nonatomic 表示是否在为getter和setter方法上锁, 上锁可以保证一定的线程安全,但一般使用最多的是atomic
  2. 存储特性 copy, strong, weak, assign
  3. copy 表示调用setter方法时,将对传入的值进行拷贝,不会持有传入的对象,而是新开辟一块内存
  4. strong表示retain传入对象,持有该指针,增加该对象的引用计数,管理其生命周期
  5. weak 表示,指向该对象,但是不会持有对象,也不会增加引用计数,在该对象销毁时,指针会指向nil
  6. assign 作用与weak 相同,唯一的区别是,当对象销毁之后,指针不会指向nil,而是变成了野指针。
  7. 能否为空,nullable 和 nonnull
  8. 如果采用copy特性,属性需要遵守NSCopying协议,实现copyWithZone方法,如果想正确进行copy,属性的属性也需要考虑深拷贝问题.
  9. 参考blog
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值