目标 C NSAutorelease池和发布



我是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

相关内容

  • 没有找到相关文章

最新更新