<span style="font-size:24px;">1.内存直接赋值,引用计数不发生'变化
2.collection(集合)内存管理:
(1)当把一个对象放入collection(数组,字典,集合)中时,会将对象的引用计数 +1 ,因为内部做了retain操作.
(2)当collection(数组,字典.集合),空间被回收时,他们会向容器中的每一个元素发送一个release消息(对应添加元素时的retain操作)
(3)当从collection(数组,字典,集合)中移除一个元素时,会release该对象,引用计数 -1.
3.setter以及getter 方法,内部是对实例变量赋值以及实例变量的取值操作,所以方法内要操作实例变量
- (void)setTea:(Teather *)tea
{
if (_tea != tea) {
[_tea release];
_tea = [tea retain];
}
}
4.上述中if语句是 判断原有对象和新对象是否是同一个,如果是同一个,就没有必要再重新赋值了,否则,会先release,release之后空间被系统回收,此时再release就成为野指针问题了
[_tea release];释放保有的之前的所有权
5.如果想对一个对象进行copy操作,对象的类必须服从一个NSCopy协议,并且实现协议中的方法
6.当该类对象的引用计数为0时,会自动调用该类的dealloc方法.
当调用dealloc方法时,该对象的空间将要被系统回收,在空间回收之前,将保有的其它的对象的所有权给释放掉.</span>