OC 内存管理基础
一. retain和release基本使用
使用注意:
1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作)
2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release)
3.谁retain , 谁release
4.谁alloc,谁release
如:
int main()
{
Person *p = [[Person alloc]init]; //计数器加1 ,值为1
[p retain]; // 计数器加1,值为2
[p release]; // 计数器减1 ,值为1
[p release]; // 计数器减1 ,值为0;
return 0;
}
二. 空指针,野指针,僵尸对象
空指针:没有任何东西的指针(存储的东西是nil, Nall0)
给空指针发送消息不会报错
野指针:指向僵尸对象(不可用内存)的指针,给野指针发送消息会报错
错误:EXC_BAD_ACCECC:访问一块坏的内存(已经被回收,已经不可用的内存)
如:int main()
{
Person *p = [[Person alloc]init]; //计数器加1 ,值为1
[p release]; // 计数器减1 ,值为0.
[p release]; // 野指针指向僵尸对象(不可用的内存)
return 0;
}
会报经典错误:EXC_BAD_ACCECC:访问一块坏的内存(已经被回收,已经不可用的内存)
僵尸对象:所占用内存已经回收的对象,僵尸对象不能再使用
经典错误:message sent to deallocated instauce ox100109a10
意思是:给已经释放的对象发送了一条错误的消息