2011-04-28 17 views
1

我正在做一個幫手類。這個輔助類包含一個我將與之交互的NSObject類和一個執行一些其他工作的UIViewController。代表似乎被設置爲零自動

這裏是發生什麼事,在我的應用程序委託或其它地方我分配我的NSObject類:

MyObjectClass *class = [[MyObjectClass alloc] init]; 
[class setDelegate:self]; 

現在,這個委託是我這樣創建:

@protocol MyDelegate 
-(void) someCall; 
@end 
@interface MyHelperClass : NSObject { 
    id <MyDelegate> delegate; 


} 
@property (retain, nonatomic) id <MyDelegate> delegate; 

所以這個偉大工程。但這是問題。如果我分配我的助手類,並將其委託給視圖控制器或其他東西,然後調用我的幫助者視圖控制器的方法之一,委託停止工作。調試後,似乎它有一些內存地址,直到我彈出其他視圖控制器,當我回到它時,委託的內存地址是0x0。

我的問題是怎麼會發生這種情況?我需要爲我的代理做些特別的事情來阻止它釋放嗎? (我不會在任何地方釋放它)我需要保留它嗎? 即使打開我的視圖控制器,我該如何保持它的分配狀態,以便繼續使用它?

在此先感謝!

+0

你如何做到這一點......「如果我分配我的幫助類並將其委託給視圖控制器或其他東西,然後調用我的方法之一打開我的幫助視圖控制器委託停止工作」。 ...請發佈您的代碼.....我認爲這是參考loss.code的問題將有所幫助。 – Ravin 2011-04-28 02:53:36

+0

Ravin,我已經展示瞭如何在上面分配我的NSObject類的代碼。我從我的委託調用方法如下:[delegate someCall]; – John 2011-04-28 02:55:08

+0

MyObjectClass * class = [[MyObjectClass alloc] init]; [class setDelegate:self]; 你在自己寫someCall方法嗎?您是否嘗試過使用MyObjectClass之外的其他名稱? – Ravin 2011-04-28 03:04:33

回答

0

委託的內存地址是0x0意味着它從來沒有被分配,而不是它被釋放。如果它被釋放了,它不再是一個有效的地址,但它將是它發佈前的相同地址。