在一个函数中分配和初始化对象,将其发送给其他函数并在其中释放它有效吗?

时间:2011-09-07 10:01:03

标签: objective-c ios xcode

// ViewController.m - implements downloader's protocol downloadComplete
- (void) startDownload
{
        Downloader *downloader = [[downloader alloc] init];
        [downloader setDelegate:self];
        [downloader startDownloading];
        // [downloader release] or autorelase makes the program crash
}

- (void) downloadComplete: (id) downloadedContent
{
        [downloadedContent release]; // will this release the object allocated in the first function? Or do I set [self release] in dealloc of Downloader.m? Or any other way to do it?
}    

// Downloader.m

- (void) startDownloading
{
      // download some data
      [[self delegate] downloadComplete:self];
}

2 个答案:

答案 0 :(得分:1)

实际上它不是很可可。我建议创建downloader作为实例方法,在需要时分配它并在dealloc中释放它。如果您可以在同一控制器实例中多次使用下载功能 - 请确保在创建下载器对象之前将其释放并清零。

答案 1 :(得分:1)

对于我所看到的,- (void) downloadComplete: (id) downloadedContent是委托方法。只释放你拥有的对象(除非明确说明),并且委托不拥有该对象,这是一个好习惯。使用dealloc

ViewController.m方法释放对象要好得多,也更清晰