为什么NSNotificationCenter在发布时会抛出异常?

时间:2010-06-21 16:49:45

标签: iphone cocoa cocoa-touch exception nsnotificationcenter

这不是一个思考的问题 - 为什么NSNotificationCenter在发布时会抛出异常?我还是iPhone开发的新手,因此还不知道Cocoa的内部,所以理解为什么会很好。

我将 defaultCenter 分配给变量,调用 addObserver:selector:name:object ,然后释放上一个变量,但调用 [通知发布] 崩溃了应用程序。我在代码中没有做任何奇怪的事情,所以找出它为什么这样做会很有趣。

有人遇到过这个问题吗?

4 个答案:

答案 0 :(得分:5)

根据我所知的NSNotifcation,您不应该将defaultcenter分配给变量,而是执行以下操作:

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

在该片段中,您调用默认中心并为特定邮件注册当前对象。

然后将消息发布到通知中心,您可以使用:

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

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

答案 1 :(得分:2)

应用程序应该只有一个默认通知中心,因此您的所有类都不应保留或释放它。你不希望你的通知中心消失在你身上,对吗?

答案 2 :(得分:1)

我认为您不拥有该对象,因此不应该释放它。

记住NARC:New Alloc,Retain,Copy。如果您执行其中一项,则必须将其释放。

答案 3 :(得分:0)

这不是你的发布。

记住NARC规则 - 您只能使用以下内容发布您带来的内容:

新 分配 保留,或 副本。

NARC。见

您正在使用NSNotificationCenter执行的操作是获取代表默认通知中心的单例的副本。值得一读的是单身人士。