Objective c 使用@autoreleasepool并发送autorelease消息

Objective c 使用@autoreleasepool并发送autorelease消息,objective-c,Objective C,我正在学习objective-c,我想澄清一件事: 当我使用自动释放池时,我应该在使用测试对象后发送自动释放消息吗 for (int i = 0; i < 10; ++i) { @autoreleasepool { TestClass* tc1 = [[TestClass alloc] init]; //....... do some stuff with tc1 [tc1 autorelease]; } } for(int

我正在学习objective-c,我想澄清一件事: 当我使用自动释放池时,我应该在使用测试对象后发送自动释放消息吗

for (int i = 0; i < 10; ++i)
{
    @autoreleasepool {
        TestClass* tc1 = [[TestClass alloc] init];
        //....... do some stuff with tc1
        [tc1 autorelease];
    }
}
for(int i=0;i<10;++i)
{
@自动释放池{
TestClass*tc1=[[TestClass alloc]init];
//……用tc1做一些事情
[tc1自动释放];
}
}
当我使用autoreleasepool时,我应该在使用测试对象后发送autorelease消息吗

他们没有任何关联

您应该做什么取决于您想做什么以及是否使用自动引用计数

如果您正在使用ARC(我认为情况并非如此,因为您发送了一条
autorelease
消息),那么在简单的情况下,您根本不必担心释放对象。(如果您必须对更复杂的模型使用高级内存管理,那么ARC甚至比MRC更复杂,但无论如何…)

如果不使用ARC,则有两个选项
autorelease
允许在最内部范围的autorelease池的末尾释放对象。因此,在您提供的示例中,可以这样做


但是,自动删除的主要目的是在从方法/函数返回对象时处置所有权,通常,您希望在不再需要时向分配的初始化对象显式发送
release
消息。

ok。所以,如果我使用ARC,即使我返回了一个对象形式的方法,我也不应该执行自动释放?试试吧!如果您使用ARC,编译器将因您使用
autorelease
而将您踢到底部,并且不会编译您的代码。@Amplier(提示:因为autorelease再次是自动完成的-)