iOS stringWithFormat 和 initWithFormat区别

在非ARC环境下,循环构造1w个NSString,

首先是stringWithFormat,占用内存0.52M

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

        [NSString stringWithFormat:@“%d”,abcdefg];

    }

然后加上@autoreleasepool,占用内存52KB

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

        @autoreleasepool {

            [NSString stringWithFormat:@"%d", abcdefg];

        }

    }

再来试试initWithFormat,占用内存0.36MB

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

        [[NSString alloc] initWithFormat:@"%d", abcdefg];

    }

再加上autorelease尾巴和autoreleasepool,占用内存52KB

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

        @autoreleasepool {

            [[[NSString alloc] initWithFormat:@"%d", abcdefg] autorelease];

        }

    }

结论:

+ stringWithFormat:

类方法,返回一个autorelease的NSString实例,不用手动Release,在自动释放池中会自动释放。

– initWithFormat:

实例方法,返回一个自己Alloc申请内存的NSString实例,根据OC内存管理黄金法则,管杀管埋,它则需要自己手动Release。

因为这两个方法只是在没有使用ARC的时候有所不同,一个需要手动Release一个则是自动进入autoreleasepool,所以在使用ARC的时候他们俩几乎没有什么区别。

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

推荐阅读更多精彩内容