Объекты Microsoft, Выпуск () функционирует возвращаемое значение?

Это сработало для меня на iPad, когда я слушаю MPMoviePlayerWillExitFullscreenNotification.

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(doneButtonClick:) 
                                             name:MPMoviePlayerWillExitFullscreenNotification 
                                           object:nil];

И метод выбора:

-(void)doneButtonClick:(NSNotification*)aNotification{
    NSNumber *reason = [notification.userInfo objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];

    if ([reason intValue] == MPMovieFinishReasonUserExited) {
        // Your done button action here
    }
}
6
задан Kev 20 May 2009 в 16:00
поделиться

3 ответа

Ваша теория верна. Управление памятью COM основано на подсчете ссылок. Метод Release интерфейса IUnknown уменьшит счетчик ссылок и вернет его. Эта функция не будет освобождать ссылки . Он не знает, у кого есть ссылка. Он просто уменьшает счетчик ссылок до тех пор, пока не достигнет нуля, а затем объект будет уничтожен. Это'

10
ответ дан 8 December 2019 в 03:54
поделиться

Release () вернет текущий счетчик ссылок на объект. Но этого делать не следует:

while( pointer->Release() > 0 );

Это обнулит счетчик ссылок и уничтожит объект.

В COM простое правило большого пальца - каждый AddRef () должно быть соответствующее Release () (только один).

Обычно реализация Release () будет выглядеть так:

int nCount = InterlockedDecrement(&this->m_cRef); //Decrement the ref count
if (nCount == 0) 
{
    delete this;
}
return nCount; 
6
ответ дан 8 December 2019 в 03:54
поделиться

В дополнение к тому, что сказал Мердад, возвращаемое значение Release предназначено только для целей отладки. Производственный код должен просто игнорировать его.

Зацикливание, пока Release () не вернет 0, определенно является ошибкой - вы никогда не должны выпускать ссылки, которыми вы не владеете.

11
ответ дан 8 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: