MRC下字符串对象的管理

这段代码有什么问题,如何修改?

for (int i = 0; i < someLargeNumber; i++) {

NSString *string = @”Abc”;

string = [string lowercaseString];

string = [string stringByAppendingString:@"xyz"];

NSLog(@“%@”, string);

}

这里,我们暂定someLargeNumber = 10W.

这段代码在ARC中是没有问题的,在MRC中,才有问题.问题也很显然,创建的字符串对象并没有释放.

字符串对象是比较特殊的对象,release,或者autorelease并不能有效释放掉.在模拟器上重复10w次可以发现内存从21.6MB一直增长到40MB.

原始代码循环执行前
原始代码循环执行后

可见,没有释放掉.

正确的修改方案如下:

for(int i = 0; i<100000;i++){

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

NSString *string = @"Abc";

string = [string lowercaseString];

string = [string stringByAppendingString:@"xyz"];

NSLog(@"%@",string);

[pool drain];

}

修改代码执行循环后

可见,对于MRC下字符串的正确释放,用NSAutoreleasePool是一个解决方案.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容