MRC下字符串對(duì)象的管理

這段代碼有什么問題,如何修改?

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

NSString *string = @”Abc”;

string = [string lowercaseString];

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

NSLog(@“%@”, string);

}

這里,我們暫定someLargeNumber = 10W.

這段代碼在ARC中是沒有問題的,在MRC中,才有問題.問題也很顯然,創(chuàng)建的字符串對(duì)象并沒有釋放.

字符串對(duì)象是比較特殊的對(duì)象,release,或者autorelease并不能有效釋放掉.在模擬器上重復(fù)10w次可以發(fā)現(xiàn)內(nèi)存從21.6MB一直增長(zhǎng)到40MB.

原始代碼循環(huán)執(zhí)行前
原始代碼循環(huán)執(zhí)行后

可見,沒有釋放掉.

正確的修改方案如下:

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];

}

修改代碼執(zhí)行循環(huán)后

可見,對(duì)于MRC下字符串的正確釋放,用NSAutoreleasePool是一個(gè)解決方案.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容