【发布时间】:2010-12-15 18:42:25
【问题描述】:
我正在为我的 iPhone 应用程序使用 Core Data。我的属性是使用保留属性设置的。
例如,“事物”实体中的“数字”属性:
#import <CoreData/CoreData.h>
@interface Thing : NSManagedObject
{
}
@property (nonatomic, retain) NSNumber * number;
@end
@implementation Thing
@dynamic number;
@end
在我的代码中使用 Thing 对象时,我一直在设置 number 属性,如下所示:
thing.number = [[NSNumber alloc] initWithInteger:1];
但是,这会造成内存泄漏(新的 NSNumber 对象的保留计数由于 alloc plus 属性保留而比期望的高一)。
由于这是针对 iPhone 操作系统的,我想自己管理内存,所以我选择不使用自动释放池(它还有更好的性能和更低的最大内存使用量的好处)。
-
我知道这种模式有效(并且已经在几篇 SO 帖子中讨论过):
NSNumber *num = [[NSNumber alloc] initWithInteger:1]; thing.number = num; [num release];这个模式很清楚,但是我对三行或临时变量并不感到兴奋。
-
我认为这也会起作用(但我没有在任何 SO 帖子上注意到它):
thing.number = [[NSNumber alloc] initWithInteger:1]; [thing.number release];这种模式不太清楚,但只需要两行并且不使用临时变量。
问题
是否有任何其他模式可以将新对象分配给保留属性(不使用自动释放池)?这里的最佳做法是什么?
【问题讨论】:
标签: iphone memory-management core-data properties cocoa-design-patterns