2011-04-28 54 views
1

我不明白這個問題:方法之間的內存大問題

我有2類A和B,在一個視圖中我有兩個按鈕,ButtonCreate和ButtonAccess。

在B中有以下方法:

-(NSDictionary *) returnData 
{ 
    NSDIctionary *data= [NSDictionary withObjectsAndKeys.....]; 
    return data; 
} 

在A I也已經屬性@property(nonatomic, retain) NSDictionary *dictio,並且在.m文件@synthesize dictio = _dictio

ButtonCreate IBAction爲 - >

B *secondaryClass = [[B alloc] init]; 
_dictio = [[secondaryClass returnData] retain]; 
[B release]; 

ButtonAccess IBAction爲 - >

NSString *value = [_dati ObjectForKey... ]; 

問題:如果我推不止一次ButtonCreate以上,在儀器我看到內存泄漏,但如果我切關閉ButtonCreate方法中的「保留」,當我從ButtonAccess訪問數據時發生崩潰。

我真的不明白我該怎麼辦...你能幫我嗎?

非常感謝。

回答

0

你沒有釋放_dictio舊值,而你沒有釋放secondaryClass

B *secondaryClass = [[B alloc] init]; 

if (_dictio != nil) 
    [_dictio release]; 

_dictio = [[secondaryClass returnData] retain]; 
[secondaryClass release]; 

但是,既然你宣佈你的財產作爲保留,你可以將該處房產的優勢,這樣做的您。

B *secondaryClass = [[B alloc] init]; 
self.dictio = [secondaryClass returnData]; // sends retain to new, release to old 
[secondaryClass release]; 
0

在試試這個,我認爲它可以解決你的問題:

ButtonCreate IBAction --> B *secondaryClass = [[B alloc] init]; 
self.dictio = [secondaryClass returnData]; 
[B release]; 
+0

感謝,這種方式聽起來不錯,它的作品,還要感謝誰回答別人 – tom89 2011-04-28 19:50:36

0

它出現在你試圖釋放B,而不是你叫secondaryClass的B的實例。

B *secondaryClass = [[B alloc] init]; 
_dictio = [[secondaryClass returnData] retain]; 
[B release]; 

如果它不是改爲:

... 
[secondaryClass release];