我開始使用在這裏描述的技術來監視應用程序的內存使用情況: Programmatically retrieve memory usage on iPhone的NSString stringWithFormat叫XX次導致內存警告
我寫了3次試驗嘗試一下,這是我發現:
- (void)test1 {
for (int i = 0; i < 1000; i++) {
NSMutableString *str = [NSMutableString stringWithString:@""];
for (int j = 0; j < 1000; j++) {
[str appendString:@"some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string "];
}
}
- (void)test2 {
for (int i = 0; i < 100000; i++) {
@autoreleasepool {
NSString *stri = @"";
stri = [NSString stringWithFormat:@"%d some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really", i];
}
}
- (void)test3 {
NSString *str = @"";
for (int i = 0; i < 500; i++) {
str = [str stringByAppendingFormat:@"%d some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really long string some really", i];
}
當我打電話test1或test3內存得到正確分配和釋放 - 我可以看到它使用上面的鏈接中描述的report_memory功能。 但是,當我打電話test2內存不會被取消分配 - report_memory升起來。如果我多次調用test2,我的應用程序會收到內存警告並終止。
我正在使用ARC。任何人都可以解釋這裏發生了什麼?
你在哪裏使用stringWithFormat的結果...就像NSString * str = [NSString stringWithFormat:@「」]; – Rajneesh071
那麼爲什麼當你不使用它時,你正在寫stringWithFormat – Rajneesh071
蘋果有很多文檔說明如何在緊密的循環中創建它們中的許多文件來解釋autorelease池的使用方法; –