代码之家  ›  专栏  ›  技术社区  ›  James Jones

目标C选择器内存管理(是否泄漏内存)?

  •  1
  • James Jones  · 技术社区  · 14 年前
    - (IBAction) someButtonCall {
    
            if(!someCondition) {
                someButtonCallBack = @selector(someButtonCall);
                [self presentModalViewController:someController animated:YES]; 
            } else
            ...
    }
    
    //Called from someController
    - (void) someControllerFinished:(BOOL) ok {
       [self dismissModalViewControllerAnimated:YES];
       if(ok) [self performSelector:someButtonCallBack];
       else ...
    }
    

    我想知道用户是否一直进入!someCondition子句,如果选择器每次都通过分配一个新的选择器而泄漏(上面的代码是假设的,而不是我正在做的)。

    感谢您的帮助。

    谢谢, 杰姆斯琼斯

    3 回复  |  直到 10 年前
        1
  •  3
  •   Georg Fritzsche    14 年前

    不,这不会泄露任何东西-你不拥有 SEL 返回的值 @selector() sel_registerName() ,Objective-C运行时执行。

        2
  •  0
  •   Marco Mustapic    14 年前

    这个 SEL 类型只是一个C字符串,因此在重新分配时不会出现内存泄漏。

        3
  •  0
  •   NSResponder    14 年前

    此示例不泄漏内存。 @selector() 在编译时进行计算。你可能会泄露 SEL 变量,但不是选择器本身。