1.MRC是什么,有什么用?在苹果开发中,我们是没有垃圾回收机制的。所以在ARC推出之前,我们苹果开发程序员需要通过手动代码的形式尽量严密的管理我们的App的内存;---------------------------------------------...
1.MRC是什么,有什么用?
在苹果开发中,我们是没有垃圾回收机制的。所以在ARC推出之前,我们苹果开发程序员需要通过手动代码的形式尽量严密的管理我们的App的内存;
--------------------------------------------------------------------------------------------------------------------------------------------------------------
2.如何运用MRC管理内存?
1)实际关键字:
无论是ARC还是MRC管理内存都涉及到几个关键字符:
使用alloc、new、copy创建一个对象,该对象的retain count 都等于1,需要用release来释放该对象。谁创建,谁去释放。在这3钟方法以外的方法创建的对象,都被系统默认的声明为autorelease。
ClassA *a = [[ClassA alloc] init];
ClassA *b = a;
[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的时候存在的特例有哪些?
--------------------------------------------------------------------------------------------------------------------------------------------------------------
本文标题为:iOS----MRC(手动内存管理)
基础教程推荐
- iOS开发 全机型适配解决方法 2023-01-14
- Android开发Compose集成高德地图实例 2023-06-15
- iOS中如何判断当前网络环境是2G/3G/4G/5G/WiFi 2023-06-18
- iOS开发使用XML解析网络数据 2022-11-12
- IOS获取系统相册中照片的示例代码 2023-01-03
- iOS Crash常规跟踪方法及Bugly集成运用详细介绍 2023-01-18
- Android Compose自定义TextField实现自定义的输入框 2023-05-13
- Android实现短信验证码输入框 2023-04-29
- MVVMLight项目Model View结构及全局视图模型注入器 2023-05-07
- Flutter进阶之实现动画效果(三) 2022-10-28