引用计数(retainCount):数值表示对象有几个人在使用它;
对象被创建时alloc 引用计数加1,
当发送retain消息时,引用计数加1;
当release消息时,减1;
当对象的引用计数为0时,系统自动调用dealloc方法销毁该对象;
对象所有权:计数器变化
创建或复制某对象,没有创建而是保留对象使用,
copy,+1, autorelease ,-1
-( void )dealloc{
[ super dealloc ]; // 子类的某些实例是继承父类的,需要释放父类拥有的这些对象
}
assign :直接赋直,默认,只是一个别名作用
retain 保留对象,两个对象指向同一个位置
copy 拷贝对象,开辟一个新内存空间,分别指向不同的内存位置
nonatomic 多线程环境下,不存在线程保护
自动释放池(Autorelease pool)是可以存放一些实体的集合,在自动释放池中的对象,是能够被自动释放的 nsobject 类提供了一个autorelease消息,当我们向一个对象发送autorelease消息时,这个对象就被放入了自动释放池,
当我们将一个对象发送了autorelease消息时,当自动释放池销毁时,会对池中的每个对象发送一个release消息,以此释放他们
(向对象发送autorelease消息,会到最后一起被release掉)
对象a retain对象b,对象b retain对象a,这时两个对象a和b都没有办法得到释放,这种情况我们称之为循环饮用
当使用new,alloc,copy,retain方法创建一个对象时,该对象的引用计数器为1。