iPhone内存管理问题和对象生命周期

时间:2009-10-04 00:49:25

标签: iphone objective-c cocoa memory-management

这是我的代码:

Phone SDK undestanding cocoa object live cycle:

- (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 个答案:

答案 0 :(得分:3)

performSelector保留对象,因此释放不会导致其保留计数变为零。

请参阅NSObject docs

此方法保留接收器和anArgument参数,直到执行选择器之后。

答案 1 :(得分:0)

performSelector可能会保留传入的对象,这就是为什么在调用DismissWelcomeMessage时它仍然有效。