2012-01-24 75 views
0

我對Objective-C非常陌生。嘗試在方法內設置類變量然後釋放它時,我一直在獲取運行時錯誤。我意識到擺脫運行時錯誤的唯一方法不是釋放它。
因此,如果一個類變量設置在一個方法內,那麼temp方法變量不需要被釋放?在方法內設置類屬性時,是否需要釋放?

我的代碼看起來是這樣的:

- (void)initData{ 
     NSMutableArray *tmpData = [[NSMutableArray alloc] init]; 

     self.data = tmpData; 

     [tmpData release]; 
} 
+1

您還可以包括數據聲明嗎? – iccir

+0

@iccir是對的 - 我們需要更多的代碼。釋放'tmpData'會從內存釋放'tmpData'和'self.data'指向的對象。 – piersadrian

+1

沒有「類屬性」或「類變量」這樣的事情。請澄清你的意思。 –

回答

2

什麼你有,如果data屬性與「保留」或「拷貝」屬性聲明是正確的。如果data使用「assign」屬性(默認值)聲明,那麼會導致崩潰。在這種情況下,解決方案是使用保留(或可能複製)爲data

@property (nonatomic, retain) NSMutableArray *data; 
+0

或者'strong',它是MRC下'retain'的同義詞,代替ARC下的'retain'。 –

+2

另外,值得說明的是:在MRC下,'initData' *必須發送'[tmpData release]',*而不管屬性聲明*,因爲它擁有對象(因爲它用'alloc'創建它)即將返回。如果它不釋放'tmpData',它會泄漏它。如果該屬性被聲明爲'strong' /'retain'或'copy',並且釋放仍然導致崩潰,那麼其他地方會出現一個錯誤,提問者必須在Instruments中搜索它。 –

+1

謝謝你的回答。我的屬性設置如下:@property(nonatomic,assign)NSMutableArray * data;所以現在我的理解是,「分配」不會增加引用計數,當我分配一個對象到這個變量,而「保留」會增加引用計數,我會能夠釋放本地方法變量沒有問題? –

相關問題