在非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的时候他们俩几乎没有什么区别。