我是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的要点
所以我想问这个问题以确保一切。这会造成错误吗?
答案 0 :(得分:3)
在Objective 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
中发布