iOS中内存管理基本概念
2016-01-23 19:54
253 查看
我们都知道,在使用objective-c进行iOS应用开发中,我们创建一个对象主要分为三个步骤:
分配内存空间,存储对象(alloc)
初始化成员变量(init)
返回对象的指针地址
改变retainCount的值可以对对象进行retain操作,使得对象的引用计数器值+1(retainCount + 1 ,返回self),执行release操作,可以让引用计数器的值-1(retainCount - 1);
当引用计数retainCount = 0的 对象就被销毁了
当一个对象要被销毁的时候,系统会自动调用dealloc函数,通知对象将要被销毁
内存管理黄金法则:
如果一个对象使用了alloc,[mutable] copy,retain,new,那么你必须使用相应的release或autonrelease
例如:在我的代码中有一个person类,简单对retain和release进行演示
分配内存空间,存储对象(alloc)
初始化成员变量(init)
返回对象的指针地址
MRC
在使用MRC进行程序开发中,每当我们创建一个对象的时候,系统都会为我们一个与内存管理相关的属性:retainCount(引用计数器),该属性用来记录当前对象被引用的次数,当一个对象刚刚创建出来的时候,retainCount的初始值为1,这个计数器,是系统用来判断是否回收对象的唯一依据,当我们的引用计数retainCount = 0的时候,系统会毫不犹豫回收当前对象.改变retainCount的值可以对对象进行retain操作,使得对象的引用计数器值+1(retainCount + 1 ,返回self),执行release操作,可以让引用计数器的值-1(retainCount - 1);
当引用计数retainCount = 0的 对象就被销毁了
当一个对象要被销毁的时候,系统会自动调用dealloc函数,通知对象将要被销毁
内存管理黄金法则:
如果一个对象使用了alloc,[mutable] copy,retain,new,那么你必须使用相应的release或autonrelease
例如:在我的代码中有一个person类,简单对retain和release进行演示
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { // 创建对象,对象当前的retainCount = 1 Person * p = [[Person alloc] init]; NSLog(@"%lu",p.retainCount); // 通过的p对象执行retain操作,retainCount+1,当前retainCount = 2 [p retain]; NSLog(@"%lu",p.retainCount); // 对p对象执行release操作,retainCount-1,当前retainCount = 1 [p release]; NSLog(@"%lu",p.retainCount); //执行release操作,retainCount = 0 ,调用person的dealloc方法 [p release]; }
相关文章推荐
- Python动态类型的学习---引用的理解
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 土人系列AS入门教程 -- 对象篇
- Flex程序开发心得小结
- C#托管堆对象实例包含内容分析
- C#实现获取不同对象中名称相同属性的方法
- Lua的内存管理浅析
- javascript asp教程第十一课--Application 对象
- PowerShell中使用Out-String命令把对象转换成字符串输出的例子
- VBS教程:对象-正则表达式(RegExp)对象
- C#检查指定对象是否存在于ArrayList集合中的方法
- sql2008启动代理未将对象应用到实例解决方案
- C#编程自学之类和对象
- C++中对象的常引用、动态建立和释放相关知识讲解