代码之家  ›  专栏  ›  技术社区  ›  leon

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

  •  0
  • leon  · 技术社区  · 16 年前

    - (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];
    }
    

    是因为Dismiss函数在函数执行时使用堆栈上传递的对象的副本作为参数吗?但即便如此,它难道不是指向现在已释放对象的指针的副本吗?

    2 回复  |  直到 16 年前
        1
  •  3
  •   nall    16 年前

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

    NSObject docs

        2
  •  0
  •   kprevas    16 年前

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