美文网首页iOS面试题详解
MRC下字符串对象的管理

MRC下字符串对象的管理

作者: BinaryBang | 来源:发表于2017-05-09 16:37 被阅读48次

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

    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是一个解决方案.

    相关文章

      网友评论

        本文标题:MRC下字符串对象的管理

        本文链接:https://www.haomeiwen.com/subject/rbqitxtx.html