2011-03-29 48 views
1

我有一個NSObject(MyCustomObject)的子類,它被實例化並被調用來執行一些邏輯並決定是否顯示一個UIAlertView。 MyCustomObject實現UIAlertViewDelegate協議來執行一些更多的邏輯並在alertView中設置一些NSUserDefaults:clickedButtonAtIndex :. 哪裏可以發佈myCustomObject?如果在用戶單擊警報視圖中的某個按鈕後不再需要myCustomObject,則myCustomObject在alertView:didDismissWithButtonIndex:?中釋放自身即可。我是符合UIAlertViewDelegate協議的NSObject - 是否適合釋放自己?

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 
    NSLog(@"I'm UIAlertView's Delegate and I'm releasing myself"); 
    [self release]; 
} 

回答

2

我認爲如果您爲自定義對象創建委託協議,然後讓該對象的所有者成爲其委託,那會更好。在您的類的alert view委託方法中,向自定義委託發送一條消息,以便它可以處理釋放您的自定義對象。

如果對象在調用代碼中自動釋放,或者調用代碼嘗試手動釋放對象本身,嘗試自我釋放可能會產生意外的行爲甚至崩潰。

+0

不列顛哥倫比亞省,每當我這樣做,我覺得我是一個可卡因癮君子也喝醉了。這太亂了......「嘿,你,請釋放我,好嗎?」我不知道。 – Fattie 2011-03-29 20:43:38

+0

爲什麼不直接讓它釋放自我 - 如果它是一個獨立的邏輯塊,爲什麼要構建額外的層來釋放它? – SVD 2011-03-29 20:45:49

+0

感謝BoltClock,你的技術使得靜態分析器也很開心(目前它認爲我正在泄漏,因爲調用代碼不會釋放myCustomObject)。調用代碼是一個視圖控制器。將iCustomObject設置爲ivar是否會更加整潔,並將其釋放到視圖控制器的dealloc方法中? – MattyG 2011-03-29 21:53:45

相關問題