何时发布带有代理人的课程

时间:2010-04-02 08:16:52

标签: iphone objective-c

代表们的一个简短问题。可以说,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中无效。

由于

2 个答案:

答案 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];
    }