objective-C 中的内存管理解说(3)

来源:未知 责任编辑:责任编辑 发表时间:2015-09-17 09:43 点击:

p> 

p> 

p> 

p>[pool release];

p> 

p>return (0);

p> 

p>} // main

p> 

p>所有标记为autorelease的对象都只有在这个pool销毁时才被销毁。如果你有大量的对象标记为autorelease,这显然不能很好的利用内存,在iphone这种内存受限的程序中是很容易造成内存不足的。例如:

p> 

p>int main (int argc, const char *argv[])

p> 

p>{

p> 

p>NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

p> 

p>int i, j;

p> 

p>for (i = 0; i < 100; i++ )

p> 

p>{

p> 

p> for (j = 0; j < 100000; j++ )

p> 

p>    [NSString stringWithFormat:@"1234567890"];//产生的对象是autorelease的。

p> 

p>}

p> 

p>[pool release];

p> 

p>return (0);

p> 

p>} // main

p> 

p>(可以参考附件中的示例程序memman-many-objs-one-pool.m,运行时通过监控工具可以发现使用的内存在急剧增加,直到pool销毁时才被释放)你需要考虑下一条。

p> 

p> 

p> 

p>7           Objective-C程序中可以嵌套创建多个autorelease pool。在需要大量创建局部变量的时候,可以创建内嵌的autorelease pool来及时释放内存。(感谢网友hhyytt和neogui的提醒,某些情况下,系统会自动创建autorelease pool, 请参见第四章)

p> 

p>int main (int argc, const char *argv[])

p> 

p>{

p> 

p>NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

p> 

p>int i, j;

p> 

p>for (i = 0; i < 100; i++ )

p> 

p>{

p> 

p> NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init];

p> 

p> for (j = 0; j < 100000; j++ )

p> 

p>    [NSString stringWithFormat:@"1234567890"];//产生的对象是autorelease的。

p> 

p> [loopPool release];

p> 

p>}

p> 

p>[pool release];

p> 

p>return (0);

p> 

p>} // main

p> 

p>(可以参考附件中的示例程序memman-many-objs-many-pools.m,占用内存的变化极小)

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Lexical or Preprocessor Issue 'xxx.h
  • ios学习笔记(二)xcode 4.3.2下实现基本交互
  • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
  • UITableView一些方法
  • IOS类似iphone通讯录TableView的完整demo【附源码】
  • ios版本的helloworld
  • iPhone SDK开发:本地文本文件内容的读取
  • 如何为Iphone应用创建启动界面
  • 去掉屏幕键盘的方法
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1