我有一个基本管理核心数据的课程。插入删除和更新数据。 我像这样初始化这个类
- (id)init
{
self = [super init];
if (self) {
self.itemList = [NSDictionary dictionaryWithObjectsAndKeys: // <== LEAKS
ITEMURL1, KEY1,
ITEMURL2, KEY2,
ITEMURL3, KEY3,
ITEMURL4, KEY4,
ITEMURL5, KEY5,
nil];
self.storedItems = [[NSMutableArray alloc] init]; // <== LEAKS
}
return self;
}
- (void)dealloc {
[storedItems release];
[super dealloc];
}
我小心翼翼地释放每一个物体。无论何时分配它,但是当我在Instruments中运行应用程序时,我似乎仍然在初始化时泄漏。
发生了什么事?我做错了什么?
答案 0 :(得分:1)
你需要在你的dealloc方法中添加[itemList release](假设你在属性声明中得到了“retain”。
对于storedItems,如果你在属性声明中保留了,你应该在分配它时自动释放它:
self.storedItems = [[[NSMutableArray alloc] init] autorelease];
或更简洁,但等效:
self.storedItems = [NSMutableArray array];
答案 1 :(得分:0)
关于storedItems:
如果storedItems声明为
@property (nonatomic, retain) NSMutableArray *storedItems;
(保留部分很重要) 然后你需要做:
NSMutableArray *storedItems_ = [[NSMutableArray alloc] init];
self.storedItems = storedItems_;
[storesItems_ release];
alloc + init会导致你的object9¥的保留计数变为1。 然后使用self.xxx将再次保留它,如您的属性的属性中声明的那样。因此它将是2.这不会发生在assign
中