0

我是 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 的要点。
所以我想问这个问题以确保一切。那会产生错误吗?

4

1 回答 1

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

于 2012-05-08T11:15:33.433 回答