`

【Objective-C】内存释放总结

阅读更多

 

1. 通过分配或复制创建的对象保持计数1

2. 假设任何别的方法获取的对象保持计数1,而且在自动释放池中. 要想在当前执行范围外使用该对象,就必须保持它

3. 向集合添加对象时它就被保持,从集合移除对象时就被释放.释放集合对象会释放该集合中的所有对象

4. 确保有多少alloc,copy,mutableCopy或retain消息就有多少release或autorelease消息发送给该对象. 换句话说,确保你的代码平衡

5. 在访问方法设置属性,先保持,再释放 (ztime: 现在有@propperty , @synthesize 两个指令自动创建此代码)

6. 用@"..."结构创建的NSString对象是常量.发送release或retain并无效果

 

 

内存释放是iphone开发过程中比较重的地方,所以在开辟内存后,我们必须小心、谨慎、并且及时的释放掉。

内存的释放,可以调用Dealloc函数,该函数可以释放,该类对象所占用的内存空间,为iphone节省宝贵的内存资源。

那么Dealloc函数是什么时候释放的哪?

以前网络上说是当 对象的引用计数 为0的时候,就可以调用iphone的垃圾回收机制,然后释放该资源,

但是一直没有真正的测试过,今天在编写游戏代码的过程看到了测试结果,确实是这个样子的。

测试代码如下:

我们先创建一个类:test_1,修改他的Dealloc函数

- (void)dealloc

{

  NSLog(@"this is test_1 view did dealloc !");//输出内容,表示调用该函数,并释放资源

[super dealloc];

}

我们在另一个地方创建他

test_1 *m_text;

if (m_text==nil)

{

  m_text = [[test_1 alloc] initWithNibName:nil bundle:nil];

}

int a = [m_text retainCount];//a = 1

[m_text retain];

int b = [m_text retainCount];//b = 2

[m_text release];

int c = [m_text retainCount];//c = 1

[m_text release];

int d= [m_text retainCount];//d = 1

m_text = nil;

int e= [m_text retainCount];//e = 0

 

经过测试发现,其实int d= [m_text retainCount];//d = 1该行代码中 d的理论之应该=0,表示该对象已经为空,

其所占用的内存资源已经得到释放, 也就是执行到改行代码后,调用了函数

- (void)dealloc

{

  NSLog(@"this is test_1 view did dealloc !");//输出内容,表示调用该函数,并释放资源

[super dealloc];

}

输出:

2011-10-25 16:05:13.333 Untitled[6358:207] test view did dealloc !

表示,对象m_text所占据的内存空间已经完全得到释放。

通过测试我们也发现,当一个对象的RetainCount函数=0的时候,系统会马上调用Dealloc函数释放该资源。


要想完全释放一个对象,的参考代码:

[m_text release];

m_text = nil;


分享到:
评论

相关推荐

    Objective-C高级编程 iOS与OS X多线程和内存管理_Objective-C_ios_

    引用计数是Objective-C早期的内存管理方式,它要求开发者手动管理对象的生命周期,当对象的引用计数变为0时,对象会被释放。而ARC是Apple引入的一种自动内存管理技术,它在编译时自动插入释放对象的代码,大大减少了...

    Objective-C基础教程(入门教程).pdf

    15. AutoreleasePool:这是Objective-C内存管理中的一个特性,允许对象被放入一个自动释放池中,在未来的某个时刻自动释放。 16. Foundation框架类:Objective-C通过Foundation框架提供了大量内置的类,用于处理...

    Objective-C编程全解最新版.pdf.zip

    7. **ARC(Automatic Reference Counting)**:ARC是Objective-C中的内存管理机制,自动处理对象引用计数,避免了内存泄漏和过早释放的问题。 8. ** Blocks **:Objective-C引入了Blocks,这是一种内联函数或闭包,...

    C语言主要知识点巩固(学习Objective-C 的前提)

    了解了C语言的基本语法后,还需关注内存管理,包括堆栈与堆的区别,以及如何正确地分配和释放内存以防止内存泄漏。 最后,良好的编程习惯和错误处理也是C语言学习中的重要环节。学会使用printf调试,理解并正确使用...

    《深入浅出发Objective-C》 内存管理.pdf

    此外,Objective-C还提供了自动释放池(Autorelease Pool),允许对象在自动释放池中注册后,由自动释放池来管理内存的释放时机。 为了简化代码,Objective-C引入了宏定义来帮助开发者自动执行释放内存的操作。例如...

    Objective-C程序设计 第6版 pdf

    5. **内存管理**:Objective-C使用引用计数进行内存管理,书中会详细解释如何正确地持有和释放对象,以避免内存泄漏。 6. **NSObjects和协议**:Objective-C中的NSObject类是所有其他类的基类,书中会讲解它的方法...

    objective-c基础教程

    4. **内存管理**: 早期版本的Objective-C采用手动内存管理的方式,开发者需要显式地分配和释放内存。自ARC(Automatic Reference Counting)机制引入后,Objective-C开始支持自动内存管理,大大降低了内存泄漏的风险。...

    Objective-C基础教程(Learn Objective-C)随书源码下载

    在Objective-C中,内存管理主要依赖于ARC(Automatic Reference Counting),它自动跟踪对象的引用计数,当对象不再被引用时自动释放内存。然而,理解引用计数和弱引用的概念对于防止内存泄漏至关重要。 10. **GCD...

    Learn objective-c on the mac配套实例代码

    - **内存管理**:Objective-C 早期使用手动引用计数(ARC),现在大多数情况下使用自动引用计数。理解何时保留、释放对象至关重要。 - **视图和控制器**:在 macOS 中,可能涉及到 NSView 和 NSViewController 的...

    Objective-C经典面试题

    在Objective-C领域,面试题往往涵盖C语言基础、Objective-C语言特性以及iOS相关知识。本次整理的“Objective-C经典面试题”中的知识点,主要针对C语言中的指针概念、Objective-C语言的数组和指针操作、宏定义及使用...

    Objective-C 入门手册 中文版(Objective-C Beginner's Guide)

    - **Retain and Release**:Objective-C使用引用计数来管理内存,`retain`增加对象引用计数,`release`减少引用计数。 - **Dealloc**:当对象的引用计数变为0时,会调用`dealloc`方法来释放内存。 - **...

    Effective Objective-C 2.0

    3. 内存管理:在Objective-C中,内存管理是编程的一个重要方面,它涉及对象的创建和释放。传统上,Objective-C使用引用计数(Reference Counting)来进行内存管理,直到引入自动引用计数(Automatic Reference ...

    Objective-C2.0程序设计习题官方答案

    Objective-C2.0是苹果公司开发的一种面向对象的编程语言,它是C语言的超集,融合了Smalltalk的动态特性,广泛应用于iOS和Mac OS X操作系统。本资料集中的"Objective-C2.0程序设计习题官方答案"显然是针对学习...

    objective-c内存管理

    Objective-C的内存管理机制与.NET和Java等语言中常见的自动垃圾回收机制不同,它更接近于C语言的手动管理方式,但在此基础上加入了一些自动化手段,使得开发人员能够在一定程度上简化内存管理的工作。 ##### 1. ...

    Objective-C培训教程

    第四章内存管理,讲解了Objective-C中对象的内存分配和释放机制。在早期的Objective-C版本中,开发者需要手动管理内存,利用retain和release方法来增加或减少对象的引用计数。而在现代的Objective-C版本中,引入了...

    Objective-C编程之道

    在Objective-C编程中,理解内存管理是非常重要的。Objective-C使用引用计数(Reference Counting)机制,每个对象有一个引用计数,当引用计数为0时,对象会被自动释放。ARC(Automatic Reference Counting)是Xcode...

    Objective-C高级编程 iOS与OS X多线程和内存管理

    《Objective-C高级编程:iOS与OS X多线程和内存管理》是一本深入探讨Objective-C在iOS和OS X平台上的核心特性的书籍。本书重点聚焦于多线程和内存管理两个关键领域,对于iOS和macOS应用开发人员来说,这是理解和优化...

    Objective-C高级编程†

    内存管理在Objective-C中至关重要,它采用了引用计数(Reference Counting)机制。每个对象有一个引用计数,当对象的引用计数变为零时,系统会自动释放该对象。后来引入的ARC(Automatic Reference Counting)自动...

Global site tag (gtag.js) - Google Analytics