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,占用内存的变化极小)
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>