1

我终于决定停止拐弯抹角,自学一些 Objective-C。这一切都是有道理的,除了当我谈到内存管理和“自动释放池”这个想法时。据我了解,如果我专门使用 init、new、alloc 创建一个对象或告诉它保留,那么我的工作就是释放内存。但是,自动释放池会自动释放与最里面的自动释放池关联的所有对象吗?例如,假设我这样做:

TestOBJ* foo = [[[TestOBJ alloc] innit] autorelease];

那么它将在第一个 @autoreleasepool 块结束时释放,还是在调用第一个 [autoreleasepool drain] 时释放?

还; 仅仅因为一个对象是在 autoreleasepool 块中创建的,并不意味着它会自动标记为 autorelease,对吗?

4

2 回答 2

2

对两点都正确。

如果您调用-autorelease它们,对象只会被添加到自动释放池中。按照惯例,所有alloc以,开头的方法newcopymutableCopy返回它们自己添加到自动释放池中的对象,因此您不必自己做。

有关详细信息,请参阅http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html

于 2013-04-03T20:57:27.150 回答
0

您几乎自己正确回答了所有问题。

于 2013-04-03T20:56:28.740 回答