objective-c - 我必须自动释放这个对象吗?

标签 objective-c cocoa cocoa-touch memory-management

我正在使用 -initWithObjectsAndKeys: 创建一个 NSDictionary:。

对于我提供给该字典的每个对象,我调用一个自制方法 -createFooBarObject,它将创建并返回该对象。

现在的问题是:根据定义,create 方法不应该释放该对象,因为它必须返回该对象,而调用者负责释放该对象。但在这里,调用者没有机会释放它,因为 NSDictionary 立即将其吸入。我在 -initWithObjectsAndKeys: 对象和键列表中调用该 create-方法,因此在添加到字典后我没有机会调用 -release 。好吧,我可以迭代字典并释放它们。但这很难看。

那么在 -createFooBarObject 方法中返回之前 -autorelease 是否有效?我不确定 -autorelease 会在哪一点发生。但在创建字典并保留该对象之前,这种情况不应该发生。有什么想法吗?

最佳答案

如果您正在调用 +alloc 来创建对象(您看起来就是这样),那么您必须释放或自动释放。

如果您创建的方法返回使用 +alloc 创建的对象,则必须返回 -autoreleased 对象。

另一种选择是不按照设计模式所说的去做,然后处理不同的模式和之间的阻抗不匹配。除非性能分析表明您存在只能通过这样做才能解决的性能问题,否则不要去那里。

在这种情况下,您需要返回一个 -autoreleased 对象。调用者就不必担心调用 -release 或 -autorelease。这是应该的。

关于objective-c - 我必须自动释放这个对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1284461/

相关文章:

iOS 7 - 核心数据迁移 - Xcode 5

objective-c - 如何创建基本的 osx prefPane?

objective-c - Cocoa 按钮在应用程序外部启动

iphone - setContentOffset 失去精度?

php - 加密解密有什么问题?

iPhone SDK - 将触摸从 UIViewController 转发到 subview

ios - 更改 UILabel 的部分文本

objective-c - 制作独特的 NSMutableArray 或 NSMutableSet

cocoa - NSDocument 子类没有被 NSWindowController 关闭?

iPhone - viewDidLoad/viewDidAppear 中的 UIView 动画问题