Objective C NSAutoreleasePool并发布

时间:2012-05-08 11:01:12

标签: objective-c release nsautoreleasepool

我是Xcode 4中的新手。

最近我正在调试Objective C程序。我写了一个像这样的函数:

-(void) func{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
    Product *product=(Product *)[appDelegate.productData objectAtIndex:0];
    NSLog(product.Name);
    [product release];
    [pool release];
}

有趣的是我添加了产品版本(因为我没有在早期的调试中发现池版本代码......)

当我运行程序时,它会被EXC_BAD_ACCESS暂停 删除产品发布后,它正确运行 我真的不知道产品对象是否在最后发布。
我不确定这是创建EXC_BAD_ACCESS的要点 所以我想问这个问题以确保一切。这会造成错误吗?

1 个答案:

答案 0 :(得分:3)

在Objective C中 - 内存处理概念非常简单 - 对象所有权。 如果我要分配一个对象,即将其保留计数增加1,那么我有责任减少该计数。

现在在这里你没有为产品对象分配任何新的内存,你只是在引用现有的内存。所以你不需要发布它。

您可以在自动发布池上发布更多内容并在 - http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html%23//apple_ref/doc/uid/10000011-SW1https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html

中发布