2009-10-04 3 views
0

Вот код, у меня есть:iPhone памяти и объект LiveCycle

Phone 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++?

ответ

3

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

См NSObject docs

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

+0

Спасибо, я пропустил эту часть в документах NSObject! – leon

0

Возможно, что performSelector сохраняет переданный объект, поэтому он по-прежнему действует, когда вызывается DismissWelcomeMessage.

Смежные вопросы