Вопрос управления памятью iPhone и живой цикл объекта - PullRequest
0 голосов
/ 04 октября 2009

Вот код, который у меня есть:

Телефон SDK непонятный жизненный цикл объекта какао:

- (void) DismissWelcomeMessage: (UIAlertView *) view
{
    [view dismissWithClickedButtonIndex:0 animated:YES];
}

- (void) ShowWelcomeMessage 
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Blah" message:@"Blah Blah" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    [self performSelector:@selector (DismissWelcomeMessage:) withObject: alert  afterDelay: WELCOME_MESSAGE_DELAY]; 

    [alert release];
}

ShowWelcomeMessage вызывается первым.

Почему DissmissWelcomeMessage работает нормально и не падает, даже если объект оповещения освобожден?

Это потому, что функция Dismiss использует копию объекта, переданного в стек, в качестве параметра функции? Но даже тогда не будет ли это просто копия указателя, указывающего на освобожденный объект?

Или [оповещение об освобождении] просто для подсчета ссылок, и на самом деле не делает то же самое, что и удалить в C ++?

Ответы [ 2 ]

3 голосов
/ 04 октября 2009

executeSelector сохраняет объект, таким образом, ваш выпуск не приводит к тому, что его счетчик отсчета обнуляется.

См. Документы NSObject

Этот метод сохраняет приемник и параметр anArgument до тех пор, пока не будет выполнен селектор.

0 голосов
/ 04 октября 2009

Возможно, что executeSelector сохраняет переданный объект, поэтому он остается действительным при вызове DismissWelcomeMessage.

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