您现在的位置:主页 > 技术中心 > 编程开发 > 移动开发 > Iphone

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版本的helloworld
  • iphone(object-c) 内存管理(3) 有效的内存管理
  • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
  • UITableView一些方法
  • IOS类似iphone通讯录TableView的完整demo【附源码】
  • [iPhone中级]iPhone团购信息客户端的开发 (二)
  • iphone(object-c)内存管理(1)
?? - ?? - ÝřŝžľŘÝź - TAGąęÇŠ - RSSśŠÔÄ - ??
Copyright © 2004-2024 上海卓卓网络科技有限公司