1.MRC是什么,有什么用?程序员
在苹果开发中,咱们是没有垃圾回收机制的。因此在ARC推出以前,咱们苹果开发程序员须要经过手动代码的形式尽可能严密的管理咱们的App的内存;函数
--------------------------------------------------------------------------------------------------------------------------------------------------------------spa
2.如何运用MRC管理内存?指针
1)实际关键字:对象
不管是ARC仍是MRC管理内存都涉及到几个关键字符:内存
使用alloc、new、copy建立一个对象,该对象的retain count 都等于1,须要用release来释放该对象。谁建立,谁去释放。在这3钟方法之外的方法建立的对象,都被系统默认的声明为autorelease。开发
ClassA *a = [[ClassA alloc] init];it
ClassA *b = a;io
[b retain];原理
//do smoething
[b release];
b = nil;
把 一个指针赋值给另一个指针的时候,a 指针所指向的对象的引用次数并无增长,也就是说,对象的retain count依然等于1。只有在retain了以后,retain count 才会加1。那么,若是这时候执行[a release],只是a指针放弃了对对象的访问权,对象的retain count 减1,对象没有被销毁。只有当b也执行了release方法以后,才会将对象销毁掉。所以,谁retain了,谁就要release。
在对象被销毁以后,指针依然是存在的。因此在release了以后,最好把指针赋为空,防止无头指针的出现。顺便一说,release一个空指针是合法的,可是不会发生任何事情。
若是你在一个函数中建立并返回一个对象,那么你须要把这个对象声明为autorelease
(ClassA *)Function()
{
ClassA *a = [[[ClassA alloc] init] autorelease];
return a;
}
不这样作的话,会形成内存泄露。
--------------------------------------------------------------------------------------------------------------------------------------------------------------
3.MRC的原理是什么?
--------------------------------------------------------------------------------------------------------------------------------------------------------------
4.使用MRC应该注意些什么?
--------------------------------------------------------------------------------------------------------------------------------------------------------------
5.使用MRC的时候存在的特例有哪些?
--------------------------------------------------------------------------------------------------------------------------------------------------------------