NSNotificationCenterがリリースしたときに例外を投げるのはなぜですか?
-
28-09-2019 - |
質問
これは、熟考する考えのような質問ではありません - なぜNSNotificationCenterがリリースされたときに例外を投げるのですか?私はまだiPhone開発が初めてなので、ココアの内臓をまだ知らないので、その理由を理解するのは良いことです。
私はそれを割り当てています DefaultCenter 変数に、呼び出します addobserver:selector:name:object そして、以前の変数をリリースしますが、 リリースを通知 アプリをクラッシュさせます。私はコードで奇妙なことをしていないので、なぜこれをしているのかを正確に見つけるのは面白いでしょう。
誰かがこの問題に遭遇しましたか?
解決
nsnotifcationについて私が知っていることから、デフォルトセクターを変数に割り当てるのではなく、次のようなことをするべきです。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showLogin) name:@"IncorrectLogin" object:nil];
そのスニペットでは、デフォルトセンターを呼び出し、特定のメッセージの現在のオブジェクトを登録します。
そして、通知センターにメッセージを投稿するには、次のことができます。
[[NSNotificationCenter defaultCenter] postNotificationName:@"IncorrectLogin" object:nil];
私はすべてのコードで上記を使用していますが、問題はありません。
他のヒント
アプリにはデフォルト通知センターが1つだけある必要があるため、クラスを保持またはリリースする必要はありません。あなたはあなたの通知センターがあなたに消えることを望まないでしょう?
私はあなたがオブジェクトを所有しているとは思わないので、それをリリースすべきではありません。
NARCを覚えておいてください:新しいアロック、保持、コピー。これらのいずれかを行う場合、リリースする必要があります。
リリースするのはあなたのものではありません。
NARCルールを覚えておいてください。
新しい割り当て保持、またはコピー。
narc。見る?
nsnotificationCenterでやっていることは、デフォルトの通知センターを表すシングルトンのコピーを取得していることです。シングルトンを読む価値があります。