1.objective-c中,对象的生命周期通过 引用计数来标示,当使用 alloc,new方法或通过copy消息时,引用计数就会加一,通过retain方法可以为对象再增加引用计数,要减少对象的引用计数,可以向该对象发送一条release消息。要获得对象引用对象的引用数量时,可以向对象发送retainCount消息来获取数量。
当引用计数0时,会调用dealloc方法销毁对象。
2.对象的自动释放
使用NSAutoreleasePool对象,可以创建一个自动释放池,给对象发送一个autorelease消息时,就可以将该对象放入到池中,当池被销毁时(即池对象调用了release方法),池中所有的对象都会被销毁。
*创建一个NSAutoreleasePool对象时,同样会有个引用计数指向该对象,并且值为1,所以当这个NSAutoreleasePool对象调用了release方法时,引用计数减为0,objective-c 就会去调用dealloc方法,销毁该池对象。
以下为自动释放池的示例:
#import <Foundation/Foundation.h>
@interface RetainTracker : NSObject
@end
@implementation RetainTracker
-(id) init{
if(self=[super init]){
NSLog(@"init: Retain count of %d",[self retainCount]);
}
return (self);
}//init
-(void) dealloc{
NSLog(@"dealloc called. Bye Bye.");
[super dealloc];
}//dealloc
@end //RetainTracker
int main (int argc, const char * argv[]) {
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
RetainTracker *tracker=[RetainTracker new]; //count: 1
[tracker retain]; //count: 2
[tracker autorelease];//count: still 2
[tracker release];// count 1
NSLog(@"releasing pool");
[pool release];//gets nuked
return 0;
}
a.使用init方法,创建了一个自动释放池对象,并且该对象的引用计数为1;
b.当执行了 new 方法时,创建了一个对象,对象引用计数增加为1
c.retain方法使计数再加1
d.向对象发送autorelease消息,将该对象置入自动释放池中,此时不影响对象的引用计数
e.release方法使对象的引用计数减为1(在这个过程中,自动释放池对象的引用计数一直为1)
f. pool对象执行realse方法,引用计数减为0,池对象销毁,dealloc方法被调用。
执行的结果为
init: Retain count of 1
releasing pool
dealloc called.Bye Bye
3.Cocoa内存管理规则:
总结起来其实就一句话: 如果我们使用了new,alloc或copy方法获得一个对象,则我们必须释放或自动释放该对象。
4.objective-c2.0中引入了垃圾回收机制,可以通过设置工程属性里,build选项卡中的Required[-fobjc-gc-only]来启用
分享到:
相关推荐
Objective-c学习笔记 Objective-c学习笔记
Objective-C程序设计 ,Objective-C中常用类的常用方法总结截图
Objective-c、UIKit自学笔记
Effective Objective-C是本学习Objective-C的好书,没有见pdf版,亚马逊上的这儿本书的价格不菲。让我们来看看书里的内容和完整的学习笔记吧。
这篇笔记主要介绍了Objective-C的一些基础知识,包括以下几个方面: 1. Objective-C概述,介绍了Objective-C的来源、发展历史和作为面向对象的C语言的特点。 2. 第一个OC程序,讲解了如何创建一个OC项目,解释了一些OC...
非常全面的Objective-c的学习教程,里面包含了很多程序员的学习笔记有图文解说,还有语法解说,还有使用函数以及如何创建,不管你是新手还是高手都是你Objective-c开发的好工具好帮手,里面还包含了学习网站的教学...
Objective-C 学习笔记 IOS软件开发
苹果的iPhone和iPad应用开发都指定使用同一开发语言:Objective-C语言。这是一种简单的面向对象编程语言,它的基础是C程序设计语言。Objective-C不仅功能强大,而且简单易学。Objective-C已经成为苹果系统下应用程序...
Objective-C是一种简单的...Objective-C通过提供类定义,方法以及属性的语法,还有其他可以提高类的动态扩展能力的结构等,扩展了标准的ANSI C语言。类的语法和设计主要是基于Smalltalk,最早的面向对象编程语言之一。
是个人iOS开发初期对数组操作所做的笔记整理,包含了大部分NSArray和NSMutableArray操作方法
涵盖了objetive-c语言的所有基本知识,变量、函数、打印、屏幕输入,教程内附完整笔记源码
Objective-C学习资料(内置学习笔记,各内容源码) 是我近学习2个月并整理的东西,对于初学者有一定的帮助
Objective C 学习笔记
#Swift学习: 从Objective-C到Swift 这篇文章是自己学习Swift的笔记与深化。希望这篇文章能够帮助已经有Objective-C经验的开发者更快地学习Swift。同时也品味到Swift的精妙之处。 结论放在开头: 我认为Swift比...
学习心得,对oc的简要讲解,图形解析,清晰明了。
Objective-C个人学习笔记
笔者精心总结的,希望给读者帮助,很好的文档,初学者的良师益友
这是Objective-C程序设计(第4版)pdf版的,里面有我自己看过后做的笔记之类的,希望在大家阅读感到不清楚的时候能够提供大家一些帮助。
个人学习objective-c和xcode helloworld 笔记,比较了objective-c 和C++ JAVA的一些区别
Objective-C过去一直以来都是iOS应用程序开发的主要支持语言,虽然现在有了Swift,但需要调用的很多现有类库还是Objective-C写成的,值得学习,下面一起来看一下这份粗浅的Objective-C的入门学习笔记: