2010-04-02 31 views
0

代表的一個簡短問題。比方說,CLASSA具有已定義的委託:何時與代表發佈課程

@protocol MyDelegate 
    -(void) didFinishUploading; 
@end 

在CLASSB我創建類的實例的

-(void) doPost { 
    CLASSA *uploader = [[CLASSA alloc] init]; 
    uploader.delegate = self; // this means CLASSB has to implement the delegate 
    uploader.post; 
} 

,並在CLASSB:

-(void)didFinishUploding { 
} 

所以當我有發佈上傳者?因爲當我在doPost中釋放它時,它在didFinishUploading中不再有效。

感謝

回答

0

而不是創建CLASSA實例doPost方法。 最好是在INIT方法來創建CLASSA *uploader = [[CLASSA alloc] init];的dealloc釋放上傳

使uploader成爲變量。

-(id) init 
    { 
     self = [super init]; 
     if(self) 
     { 
      uploader = [[CLASSA alloc] init]; 
      uploader.delegate = self; 

     } 
     retrurn self; 
    } 

    -(void) doPost 
    { 
     uploader.post; 
    } 

    -(void)didFinishUploding 
    { 
     uploader.delegate = nil; 
     //your code 
    } 

    -(void) dealloc 
    { 
     [uploader release]; 
     [super dealloc]; 
    } 
+0

我發現,設置class.delegate在釋放它時不爲零也是一個好主意 – SteMa 2010-04-26 08:52:38

1

釋放它didFinishUploding。將CLASSA * uploader放在CLASSB的實例變量中以允許這樣做。