Выделение и инициализация объекта в одной функции, отправка его в другую и освобождение там работает - PullRequest
0 голосов
/ 07 сентября 2011
// 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 ]

1 голос
/ 07 сентября 2011

Что я вижу, - (void) downloadComplete: (id) downloadedContent - это метод делегата.Хорошей привычкой является освобождение только тех объектов, которыми вы владеете (за исключением случаев, когда это явно указано), и делегат не владеет этим объектом.Намного лучше и понятнее освободить объект методом dealloc, равным ViewController.m

1 голос
/ 07 сентября 2011

На самом деле это не очень какао. Я бы предложил создать downloader в качестве метода экземпляра, выделить его при необходимости и выпустить его в dealloc. Если вы можете использовать функцию загрузки несколько раз в одном и том же экземпляре контроллера - убедитесь, что вы освободили и удалили объект загрузчика до его создания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...