我是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的主要观点。
所以我想问这个问题以确保一切。这是创建错误吗?
在目标C中 - 内存处理概念非常简单 - 对象所有权。如果我要分配一个对象,即将其保留计数增加 1,那么我有责任减少该计数。
现在,在这里,您没有将任何新内存分配给产品对象,您只是引用了现有内存。所以你不需要释放它。
您可以详细了解自动释放池和发布位置 - http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html%23//apple_ref/doc/uid/10000011-SW1 和 https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html