在非ARC環(huán)境下,循環(huán)構造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的時候他們倆幾乎沒有什么區(qū)別。