【发布时间】:2013-10-18 09:31:56
【问题描述】:
我和我的朋友试图弄清楚@autoreleasepool 何时在启用ARC 时有用,我们注意到应用程序中出现了奇怪的行为。我们创建了多种方法:
- (NSDictionary *)autoreleaseDict {
return [NSDictionary dictionaryWithObjectsAndKeys:@"object", @"key", nil];
}
- (NSDictionary *)regularDict {
return [[NSDictionary alloc] initWithObjectsAndKeys:@"object",@"key", nil];
}
- (NSDictionary *)allocDict {
return [[NSDictionary alloc] initWithObjectsAndKeys:@"object", @"key", nil];
}
- (NSDictionary *)allocAutoreleaseDict {
return [NSDictionary dictionaryWithObjectsAndKeys:@"object", @"key", nil];
}
并在 2 个嵌套循环中运行它们:
for (int i = 0; i < 10; i++) {
@autoreleasepool {
for (int j = 0; j < 100000; j++) {
NSDictionary *dict = [self autoreleaseDict];
// NSDictionary *dict = [self regularDict];
// NSDictionary *dict = [self allocDict];
// NSDictionary *dict = [self allocAutoreleaseDict];
}
}
}
同样的方法用不同的名字显示不同的结果(regularDict和allocDict):
测试1 (autoreleaseDict)
测试2 (regularDict)
Test3 (allocDict)
Test4 (allocAutoreleaseDict)
当方法返回对象时,带有ARC 的AFAIK,该对象是autorelease。 Test1、Test2 和 Test4 都是如此,但在我看来,Test3 (allocDict) 中的对象不是 autorelease,因为内存使用率低。我相信那是因为alloc这个方法的名字中的字。
也许有人知道为什么应用程序会这样工作?
【问题讨论】:
标签: objective-c