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