我开始使用此处介绍的技术监视应用程序的内存使用情况:
Programmatically retrieve memory usage on iPhone
我编写了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对象。因此,在此线程末尾释放自动释放池时,将释放对象。
关于iphone - NSString stringWithFormat调用XX次会导致内存警告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12562282/