代码之家  ›  专栏  ›  技术社区  ›  Jamie Rumbelow

为什么我释放nsnotificationCenter时会引发异常?

  •  0
  • Jamie Rumbelow  · 技术社区  · 14 年前

    这与其说是一个深思熟虑的问题,不如说是一个问题——为什么nsnotificationcenter在发布异常时抛出异常?我对iphone的开发还是个新手,因此还不知道cocoa的内部结构,所以很好理解为什么。

    我正在分配 默认中心 到变量,调用 addObserver:选择器:名称:对象 然后释放前一个变量,但调用 [通知释放] 使应用程序崩溃。我并没有在代码中做任何奇怪的事情,所以找出它为什么要这样做是很有趣的。

    有人碰到这个问题吗?

    4 回复  |  直到 14 年前
        1
  •  5
  •   James    14 年前

    根据我对nsnotifation的了解,您不应该将defaultcenter分配给变量,而应该执行以下操作:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showLogin) name:@"IncorrectLogin" object:nil];
    

    在这段代码中,您调用默认中心并为特定消息注册当前对象。

    然后,要向通知中心发送消息,您可以使用:

    [[NSNotificationCenter defaultCenter] postNotificationName:@"IncorrectLogin" object:nil];
    

    我在所有代码中都使用了上面的内容,并且没有任何问题。

        2
  •  2
  •   kubi    14 年前

    应用程序应该只有一个默认通知中心,所以所有类都不应该保留或释放它。你不想让你的通知中心消失在你身上,对吧?

        3
  •  1
  •   Emil    14 年前

    我不认为你拥有这个物体,因此不应该释放它。

    记住毒品:新的分配,保留,复制。如果你这样做,你必须释放它。

        4
  •  0
  •   Dan Ray    14 年前

    这不是你的。

    记住禁毒规则——你只释放你带来的东西,使用:

    新的 分配 保留,或 复制。

    NARC。看到了吗?

    使用nsnotificationCenter执行的操作是获取表示默认通知中心的singleton的副本。值得一读单件的。