这与其说是一个思考的问题,不如说是一个思考——为什么 NSNotificationCenter 在发布时会抛出异常?我还是 iPhone 开发的新手,因此还不了解 Cocoa 的内部结构,所以最好了解原因。
我将defaultCenter分配给一个变量,调用addObserver:selector:name:object然后释放前一个变量,但是对[notify release]的调用使应用程序崩溃。我没有在代码中做任何奇怪的事情,所以找出它为什么这样做会很有趣。
有人遇到过这个问题吗?
这与其说是一个思考的问题,不如说是一个思考——为什么 NSNotificationCenter 在发布时会抛出异常?我还是 iPhone 开发的新手,因此还不了解 Cocoa 的内部结构,所以最好了解原因。
我将defaultCenter分配给一个变量,调用addObserver:selector:name:object然后释放前一个变量,但是对[notify release]的调用使应用程序崩溃。我没有在代码中做任何奇怪的事情,所以找出它为什么这样做会很有趣。
有人遇到过这个问题吗?
根据我对 NSNotifcation 的了解,您不应将 defaultcenter 分配给变量,而应执行以下操作:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showLogin) name:@"IncorrectLogin" object:nil];
在该片段中,您调用默认中心并为特定消息注册当前对象。
然后向通知中心发布消息,您可以使用:
[[NSNotificationCenter defaultCenter] postNotificationName:@"IncorrectLogin" object:nil];
我在所有代码中都使用了上述内容,并且没有任何问题。
您的应用程序应该只有一个默认通知中心,因此您的任何课程都不应该保留或释放它。你不希望你的通知中心消失在你身上,对吧?
我认为您不拥有该对象,因此不应释放它。
记住 NARC:新分配、保留、复制。如果您执行其中一项操作,则必须释放它。
释放不是你的。
记住 NARC 规则——你只发布你使用的东西:
新的分配保留或复制。
国家癌症研究中心。看?
您对 NSNotificationCenter 所做的是获得代表默认通知中心的单例副本。值得一读单身人士。