objc 内存管理
1. 对象生命周期
1) 诞生: new or alloc
2) 生存: 接收消息和执行操作
3) 交友: 借助组合的方法和参数
4) 死去: 被释放
2. 方法
1) –(id) retain;
2) –(void) release;
3) –(unsigned) retainCount;
3. 引用计数
1) 每个对象都有一个与之相关联的整数---引用计数
2) 计数规则为
i. 访问+1 访问结束-1 为0 销毁
ii. 当创建或者copy的时候调用retain为计数器+1
iii. 当销毁当前对象 调用release 为计数器-1
iv. 当计数器为0的时候,objc自动调用dealloc方法,释放全部内存
v. 获取计数器得当前值 retailCount
4. 访问方法的保留和释放(复合时使用)
1) {
Mode mode
}
–(void) setMethod:(Mode *)newMode{
[newMode retain];
[mode release];
}
这个方法针对两种情况
1. mode 和 newMode 不一样。普通的set
现在mode是空的。没有初始化。 所以 mode release 没有影响,而newModw retainCount 是两次,赋给mode(现在是指针) set完后 main方法负责清理一次。 所有调用的对象那还有一次。
2. mode和newMode一样
newMode 先添加一次, 使mode变成了2,然后mode减去一次,变成了1.所以main方法可以释放掉mode
-(void) dealloc{
//释放该对象内所有的内置对象
[super dealloc];
}
5. 需要及时释放的及时释放
1) 比如NSString 在返回的时候 把NSString对象添加到 NSAutoreleasePool 里面
[str autorelease]
6. 因为有了自动释放池 所以 5的情况可以不考虑
1) 最好使用pool release 使用所有版本的mac os系统
7. 在任何时候向一个对象发送autorelease详细,该xuiduixiang都会被添加到自动释放池中。
8. Cocoa内存管理规则
Ps: iphone开发时,如果可以自己release,尽量自己管理
1) 当不再使用一个对象后,必须清理掉或者添加到自动释放池中。
2) 当你得到的对象已经设置成自动释放,则你不需要执行任何操作确保该对象被清理。如果你需要持有该对象一段时间,必须在使用后释放
3) 如果你保留了某个对象,你需要(最后)释放或者自动释放该对象,必须保持retain和release方法使用的次数相等
9. 不是自己 alloc new copy 出来的对象,不需要管理
10. 希望对放在自动释放池中的对象进行持有则需要在使用完后 retain , 在dealloc release掉他。符合内存管理规则中的retain一次必须releas一次。
11. 创建多局部变量
Objective-C程序中可以嵌套创建多个autorelease pool。在需要大量创建局部变量的时候,可以创建内嵌的autorelease pool来及时释放内存。
int main (int argc, const char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int i, j;
for (i = 0; i < 100; i++ )
{
NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init];
for (j = 0; j < 100000; j++ )
[NSString stringWithFormat:@"1234567890"];//产生的对象是autorelease的。
[loopPool release];
}
[pool release];
return (0);
} // main
12. 自动管理机制(用不上)
13. 放在集合里面对象 不用管理 , 集合销毁时对象也被销毁。
分享到:
相关推荐
这儿的运行时系统扮演的角色类似于Objective-C语言的操作系统,Objective-C基于该系统来工作。本文档将具体介绍NSObject类以及Objective-C程序是如何和运行时系统交互的。特别地,本文档还给出来怎样在运行时动态地加
objective-c 内存管理 alloc init release
Objective-C高级编程 iOS与OS X多线程和内存管理.pdf
Objective-C内存管理 刚接触的的人可能有些迷惑,看了本文 你将成为Objective-C内存管理高手 文字 高清版
Objective-C语言的许多决策可以在编译和运行时执行。只要有可能,它是动态的。这意味着Objective-C语言不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。Runtime系统是一种用于Objective-C语言的操作系统...
第7章到第10章讲述objective-c的基础框架,以及文件操作、内存管理、数据保存等内容。第11章讲述了应用工具框架。第12、13章分别讲述了如何开发iphone/ipad应用程序。第14章讲述了objective-c++和访问mysql数据库的...
Objective-C 内存管理 深入浅出发,熟悉内存管理。
初学objectice-C的朋友都有一个困惑,总觉得对objective-C的内存管理机制琢磨不透,程序经常内存泄漏 ...我在这里总结了自己对objective-C内存管理机制的研究成果和经验,写了这么一个由 浅入深的教程
《Objective-C 程序设计(第4版)》已经为iOS 5和Xcode4.2中的重大变更做了全面更新,最大的改动是引入了自动引用计数(ARC),并详细说明了如何在Objective-C编程过程中使用ARC提升和简化内存管理。
希望这个简单的Objective-C语言教程能够为你提供一个入门的起点。Objective-C是一种面向对象的编程语言,广泛应用于Mac OS和iOS开发。通过学习Objective-C的基本语法、类和对象、控制流程和方法等内容,你将能够编写...
Objective-C高级编程 iOS与OS X多线程和内存管理.
详细介绍 objective-c内存管理和原理剖析
用Objective-C语言实现了各种设计模式,收集各种例子,方便大家学习和普及设计模式。.zip用Objective-C语言实现了各种设计模式,收集各种例子,方便大家学习和普及设计模式。.zip用Objective-C语言实现了各种设计...
C语言主要知识点巩固(学习Objective-C 的前提),PPT格式。
Objective-C内存管理课件.docx ,assign,retain,copy
Objective-C内存管理教程和原理剖析,很详细全面的内存管理教程
本书全面而系统地讲述Objective-C语言的基础知识和面向对象编程的重要概念,结合实例介绍了Cocoa工具包的优秀特性和其中的框架,以及继承、复合、源文件组织、内存管理、对象初始化和类别创建等众多重要的面向对象...
Objective-C 基础教程,从入门到精通 Objective-C 基础教程,从入门到精通,是你学习 Objective-C 的经典之作。
中文名: Objective-C基础教程 作者: Mark Dalrymple Scott Knaster译者: 高朝勤 杨越 刘霞图书 分类: 软件 资源格式: PDF 版本: 扫描版 出版社: 人民邮电出版社 书号: ISBN: 9787115208774 发行时间: 2009...
在windows系统下搭建Objective-C开发环境,由于公司要做iphone开发,个人学习objc(Objective-C)语法,所以在windows7下搭建了一个objc开发环境,现把自己整理的帮助文档拿来与大家分享,希望能对大家有所帮助。...