【发布时间】:2014-08-12 04:38:46
【问题描述】:
ARC 是否不再需要在后台线程中调用的方法上使用@autoreleasepool?下面的代码假设会导致内存泄漏,除非 doStuff 使用 @autorelease 池进行包装,但是当我运行工具时,它显示 User 被分配并在 runloop 结束时被释放。
- (IBAction)buttonClicked:(id)sender {
[self performSelectorInBackground:@selector(doStuff) withObject:nil];
}
- (void)doStuff {
User *user = [[User alloc] init];
NSLog(@"%@", user);
}
【问题讨论】:
-
您的
user实例不会自动释放,因此不会泄漏。 ARC 将在doStuff方法的末尾添加对release的显式调用。尝试使用自动释放的对象进行测试,例如NSArray *array = [NSArray array];。 -
我试过 [NSArray 数组],不会造成泄漏
-
@aryaxt 为什么你认为它会泄露?您共享的代码中没有任何内容在 ARC 下有任何泄漏。
-
@CrimsonChris 我在文档中找不到任何说明 ARC 处理此问题的内容,因此暂时不想相信它
-
@aryaxt 这个结论是基于观察和假设它总是这样(每个操作系统、每个版本、每个设备、所有其他情况)。我不会在这么薄的冰上构建我的软件,尤其是文档另有说明。
标签: objective-c memory-management