我解決了一個聽起來很奇怪的事情:調用[self retain]和[self autorelease]。[self retain],[self autorelease],當我被分配爲代表時,這是否正確?
這裏的情況:
myObject的是一個UIView的一個子類,所以通常它的分配,把視圖堆棧,並釋放。 MyObject也有一個定時器,它將從超級視圖中刪除它自己。所以基本上MyObject可以隨時解除分配。 除了顯示很酷的stuf外,MyObject還能夠顯示UIAlertView,並等待用戶的選擇,因此它是alertView的委託。 的問題是,如果用戶進行MyObject的後一種選擇被釋放......那麼你知道EXC_BAD_ACCESS我猜...
這樣我就可以一直保持到AlertViews的引用(是的,有severals),和在MyObject dealloc方法中將委託設置爲零。但我無法處理的選擇,然後(並且有好幾種,它將使更多變的情況下,我不喜歡
所以我所做的是:
//alertView creation
-(void)showAlert{
[self retain];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"title"
message:@"message"
delegate:self
cancelButtonTitle:@"No"
otherButtonTitles:@"Yes",nil];
[alertView show];
[alertView release];
}
//Delegate method
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
[self autorelease];
// Do the job
}
我知道這是不是很好,我已經提出了許多意見,以使其他開發人員能夠重複使用代碼時要小心,但我看不到另一種選擇。是否有更好的方法來處理它?
我正在處理的對象是一個我們給予客戶的圖書館,所以它也可以從我們的客戶的超視圖中刪除。儘管這是一個好主意,但它會讓我們的客戶做到這一點太複雜。 – Julien