2010-05-19 34 views
2

以下是一個場景:什麼是安全的方式來檢查協議響應

視圖控制器將新控制器推到導航控制器。這個子控制器創建一個使用NSURLConnection的模型。當這個連接完成後,它會打電話如下:

[self.delegate modelDidFinishParsing:self]; 

什麼是生成此代碼的安全方法?現在,我有這樣的代碼,並在一定的情況下崩潰了:

if ([self.delegate conformsToProtocol:@protocol(ModelDelegate)]) [self.delegate modelDidFinishParsing:self]; 

當它崩潰時擁有該模型視圖控制器從堆棧中彈出的模型完成前的情況。我應該讓這個模型成爲一個ivar,以便控制器在它自己的- (void)dealloc中發佈它?

回答

1

在你檢查,你可以確保代表不nil

if (self.delegate && [self.delegate conformsToProtocol...]) [self.delegate modelDidFinishParsing:self]; 
+0

是正確的方式做的一切嗎? – rickharrison 2010-05-20 15:17:52

+0

那麼,我個人會使用[self.delegate respondsToSelector ..]而不是[self.delegate conformsToProtocol ..],但除此之外,它應該工作。 – 2010-05-20 15:40:10