我有一個很大的NSDictionary,裏面有一個較小的NSDictionary。我想autorelease更大的一個,並保留第二。我有這樣的代碼在我的init方法:Objective-C:在自動發佈的NSDictionary中保留一個NSDictionary
// Autoreleased stage dictionary NSString *plistPath = [[NSBundle mainBundle] pathForResource:map ofType:@"plist"]; NSDictionary *mapDict = [NSDictionary dictionaryWithContentsOfFile:plistPath]; // Owned items citiesDictionary = [[mapDict objectForKey:@"Cities"] retain];
citiesDictionary在類接口聲明爲:
NSDictionary *citiesDictionary;
如果我嘗試使用釋放citiesDictionary中的dealloc下面一行它崩潰。
[citiesDictionary release];
但是,如果我沒有的dealloc citiesDictionary,我得到儀器報道時,我的dealloc包含citiesDictionary類內存泄漏。我承認mapDict在初始化結束時被釋放。這個取消分配是否會影響citiesDictionary,即使我稱之爲保留?
如果是這樣,我怎樣才能保留較小的字典,同時釋放較大的字典呢?分配citiesDictionary時,我嘗試了不同的事情,但似乎沒有任何工作正確。一些方法我試過:
citiesDictionary = [[mapDict objectForKey:@"Cities"] copy];
和
citiesDictionary = [NSDictionary initWithDictionary:[mapDict objectForKey:@"Cities"]];
甚至
citiesDictionary = [NSDictionary initWithDictionary:[[mapDict objectForKey:@"Cities"] copy]];
任何幫助表示讚賞。謝謝。
我會接受你自己的答案和投票的答案,幫助你弄清楚。 – 2011-04-14 00:33:13
已經投了票,謝謝。 – 2011-04-14 12:54:59