@property strong,weak,assign,copy,retain等关键字
内存管理
众所周知ios的内存管理是基于引用计数的。
- 当对象被创建(通过alloc、new或copy等方法)时,其引用计数初始值为1
- 給对象发送retain消息,其引用计数加1
- 給对象发送release消息,其引用计数减1
- 当对象引用计数归0时,ObjC給对象发送dealloc消息销毁对象
注意:
- 通过alloc、new或copy等方法引用计数初始值为1。而其他方法比如[NSMutaleArray array]返回时会自动加入autoreleasepool,arc中如果有强引用指向它,其引用计数为2.非arc时一般需要retain 一下,才能持有对象。
- alloc和new 的主要区别功能上几乎是一致的。new会默认使用init的初始化方法。其次只在于alloc分配内存的时候使用了zone,这个zone是个什么东东呢?它是给对象分配内存的时候,把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的代价,提升了程序处理速度。
retain、release、retainCount 的实现
这三个参数是 __CFDoExternRefOperation(uintptr_t op,id obj)接口实现。这个接口首先会通过obj的地址作为键值。找到其引用计数的散列表。然后根据op的类型分别进行这三种操作。
@property介绍
OC意识到当getter方法和sette