代表们的一个简短问题。可以说,CLASSA有一个代表定义:
@protocol MyDelegate
-(void) didFinishUploading;
@end
在CLASSB中,我创建了一个CLASS A的实例
-(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 :(得分:1)
在didFinishUploding
中发布。将CLASSA * uploader
放在CLASSB的实例变量中以允许这样做。
答案 1 :(得分:0)
而不是在 doPost 方法中创建 CLASSA 实例。
最好在 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];
}