0

我有一個類,基本上管理核心數據。插入刪除和更新數據。 我初始化這個類,像這樣Iphone:這是一個壞主意嗎?內存管理/泄漏問題

- (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]; 
} 

我已照顧我每次釋放對象仔細。每當它被分配時,但當我在樂器中運行應用程序時,我似乎仍然在初始化時發生泄漏。

發生了什麼事?難道我做錯了什麼?

回答

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,這不會分配

+0

由於已停止storedItems從泄漏。我不明白,爲什麼要這樣做?和我在做什麼不一樣? – Rupert 2010-09-26 15:23:44

+0

itemList仍然泄漏..是因爲常量? – Rupert 2010-09-26 15:24:41

+0

這裏有一個解釋:http://nacho4d-nacho4d.blogspot.com/2010/08/notes-on-memory-management-in-objective.html。關於itemList,itemList是如何聲明的? – nacho4d 2010-09-26 15:32:24

1

你需要[itemList中發佈]添加到您的dealloc方法(假設你有「保留」的財產申報。

至於storedItems發生,如果你有在財產申報挽留,你應該自動釋放它,當你爲它分配:

self.storedItems = [[[NSMutableArray alloc] init] autorelease]; 

或者更簡潔,但等效:

self.storedItems = [NSMutableArray array]; 
+1

如果你正在使用屬性,更喜歡'self.itemList = nil; self.storedItems =零;'。 – 2010-09-26 16:21:28