2016-03-13 30 views
0

我在我的項目中使用UIActionSheetUIActionSheet發佈後解僱

self.actionSheet = [[[UIActionSheet alloc] initWithTitle:nil] autorelease]; 

這是對象:

@property (nonatomic, retain) UIActionSheet *actionSheet; 

而且UIActionSheet後解僱我想將其釋放,並使其nil此代碼:

[self.actionSheet release]; 
self.actionSheet = nil; 

但是當我這樣做的時候pp崩潰,任何想法爲什麼會發生?

+0

您必須使用ARC啓用的代碼... autorelease是歷史記錄。 – iAnurag

+0

@iAuurag我沒有意識到Apple已經從編譯器中刪除了MRC。爲什麼不直接跳到迅速?也許objective-c是歷史! – YvesLeBorg

+0

@iAuurag不,你不必使用ARC。 – rmaddy

回答

2

手動調用release是問題所在。當使用屬性的合成setter時,它會正確釋放前一個對象。

您應該更改您的代碼:

self.actionSheet = nil; 

,或者,如果你喜歡手動釋放,底層的實例變量設置爲nil,像這樣:

[self.actionSheet release]; 
_actionSheet = nil; 

正如建議評論,你應該將你的代碼遷移到ARC。如果你無法遷移所有的代碼,你仍然可以遷移大部分代碼,只保留MRC中的「有問題」的代碼。