A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© flyfuckadmin 中级黑马   /  2014-10-17 16:04  /  1638 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如下代码:
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连接一样。

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

8 个回复

倒序浏览
朋友你面试过了么?求交流
回复 使用道具 举报
魔法少年十三 发表于 2014-10-17 17:32
朋友你面试过了么?求交流

我知道你面试过了。。。求交流{:3_54:}
回复 使用道具 举报
魔法少年十三 发表于 2014-10-17 17:32
朋友你面试过了么?求交流

我还没申请,技术分不够,你给点给我吧。够25分我就申请。
回复 使用道具 举报
我说你是个逗比 发表于 2014-10-17 17:49
我知道你面试过了。。。求交流

没有额。。技术分不够,没有申请
回复 使用道具 举报
我说你是个逗比 发表于 2014-10-17 17:49
我知道你面试过了。。。求交流

求给点黑马币,还差三个技术分
回复 使用道具 举报
flyfuckadmin 发表于 2014-10-17 21:02
求给点黑马币,还差三个技术分

已经25了
回复 使用道具 举报
flyfuckadmin 发表于 2014-10-17 21:02
求给点黑马币,还差三个技术分

不好意思昨天晚上太困了没看到
回复 使用道具 举报
我说你是个逗比 发表于 2014-10-17 17:49
我知道你面试过了。。。求交流

好啊,你QQ多少?私信吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马