首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

【Objective-C】内存储器释放总结

2012-12-27 
【Objective-C】内存释放总结?1. 通过分配或复制创建的对象保持计数12. 假设任何别的方法获取的对象保持计数

【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;


热点排行