2011-05-06 64 views
1

我廣泛使用了代表VIEW - CONTROL - MODEL結構的代表團。通常,在運行應用程序期間保留MODEL對象,導致很少問題。如何知道是否發佈了ios代理

但是,VIEW對象(通常是UIViewController的實例)被分配並釋放很多次。

nil設置爲分配了動態UIViewController實例的代理對象,當它被釋放時,是我知道如何避免EXC_BAD_ACCESS錯誤的一種方法。

然而,即使我總是用:

if ([delegate respondsToSelector:@selector(communityModel:finishedDeletingComment:)]) { 
    [delegate communityModel:self finishedDeletingComment:succeeded]; 
} 

它並不是完美的,以防止錯誤。如果不同的VIEW對象共享CONTROL對象的一個​​代表或有限數量的代表,它總是容易導致代表被無意中替換爲另一個代表,導致EXC_BAD_ACCESS

是否有更好的方式來管理代表,以確定它是否真的可用在調用委託方法的時刻?

我懷疑是否應該改變我爲委託設置屬性的常用方法。我用這種方式來設置代表的屬性:

@property (nonatomic, assign) id<ControlDelegate> delegate; 

我是否正確地懷疑屬性設置?

回答

0

我聲明代表爲assign屬性,當我的對象(它將使用委託)是委託的成員或委託成員的成員等。在這種情況下,retain屬性將導致內存泄漏。 其他地方我沒有看到不保留委託的理由。如果您可以接受 - 請嘗試聲明您的財產爲:

@property (nonatomic, retain) id<ControlDelegate> delegate; 
相關問題