黑马程序员技术交流社区

标题: NSAutoreleasePool存在的问题 [打印本页]

作者: flyfuckadmin    时间: 2014-10-17 16:04
标题: NSAutoreleasePool存在的问题
如下代码:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
for(int i=0;i<1000000;i++)
{
   NSString *s=@"****";
   //其它代码
}
[pool release];

这里在循环100万次的代码中每次都创建一个NSString实例,由于NSString没有使用alloc创建实例,因此我们使用了自动回收池。但这段代码的问题是这100万个NSString要在for循环完毕,最后的pool release 方法调用后才会回收,这就会造成在for循环调用过程中,内存占用一直上涨。

改进方法:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
for(int i=0;i<1000000;i++)
{
   NSString *s = @"***";
   if(i%100==0){
      [pool release];
      pool = [[NSAutoreleasePool alloc] init];
   }
}

解决方案的道理类似于J2EE中Hibernate的JDBC连接一样。


作者: 魔法少年十三    时间: 2014-10-17 17:32
朋友你面试过了么?求交流
作者: 我说你是个逗比    时间: 2014-10-17 17:49
魔法少年十三 发表于 2014-10-17 17:32
朋友你面试过了么?求交流

我知道你面试过了。。。求交流{:3_54:}
作者: flyfuckadmin    时间: 2014-10-17 20:57
魔法少年十三 发表于 2014-10-17 17:32
朋友你面试过了么?求交流

我还没申请,技术分不够,你给点给我吧。够25分我就申请。
作者: flyfuckadmin    时间: 2014-10-17 20:58
我说你是个逗比 发表于 2014-10-17 17:49
我知道你面试过了。。。求交流

没有额。。技术分不够,没有申请
作者: flyfuckadmin    时间: 2014-10-17 21:02
我说你是个逗比 发表于 2014-10-17 17:49
我知道你面试过了。。。求交流

求给点黑马币,还差三个技术分
作者: 我说你是个逗比    时间: 2014-10-18 09:58
flyfuckadmin 发表于 2014-10-17 21:02
求给点黑马币,还差三个技术分

已经25了
作者: 魔法少年十三    时间: 2014-10-18 16:29
flyfuckadmin 发表于 2014-10-17 21:02
求给点黑马币,还差三个技术分

不好意思昨天晚上太困了没看到
作者: 魔法少年十三    时间: 2014-10-18 16:30
我说你是个逗比 发表于 2014-10-17 17:49
我知道你面试过了。。。求交流

好啊,你QQ多少?私信吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2