たとえば、メモリが少なくなると、システムはUIApplicationDidReceiveMemoryWarningNotification
通知を送信します。その時点で、アップル社はすべてのドキュメントに書いている。しかし、この通知はどこから来ていますか、どの方法で通知されますか?どこに、どのように私は通知を受けるものを登録するのですか?通知を受け取るためにオブジェクトを登録する場所と方法を教えてください。
答えて
すべての通知が集中管理される通知センターに送信されます。この通知について通知を受けたいオブジェクトは、通知を受けたい通知を通知し、通知が発生したときにどのメソッドを呼び出すべきかを通知センターに通知します。
詳細については、Notification programming topics for CocoaとNSNotification class referenceをご覧ください。あなたは、通知を受けたいクラスの初期化コード内から
は、次のメソッド呼び出しを行います。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleMemoryWarning:) name: UIApplicationDidReceiveMemoryWarningNotification object:nil];
これは、次のようにあなたのクラスはまたhandleMemoryWarningメソッドを実装することを前提としています
- (void) handleMemoryWarning:(NSNotification *)notification
{
}
アプリケーションデリゲートを使用し、オプションのメソッドを実装する方がはるかに簡単です
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
最も一般的な通知は、デリゲートへのコールに変換されます。通常は、正式なプロトコルのオプションのメソッドに変換されます。あなたのデリゲートは好きなオブジェクトにすることができます。
通知の名前を取得し、最初から 'UI'を削除し、最後から' Notification'を取り除き、最初の文字をダウンケーシングすることにより、デリゲート名を取得する方法に注意してください。 – Abizern
セレクタが通知を引数として受け取る必要があることに注意してください。
@selector(handleMemoryWarning)と - (void)handleMemoryWarning {}のようなものを使用すると、オブジェクトは通知を送信せず、あなたのすべてのメモリを保持します。
私はちょうどこれに噛まれました。
完全に真実ではありません(私はそれも試しました)。パラメタなしで、またはパラメータでセレクタを使用することができます。また、iOSシミュレータの "hardware - > simulate memory warning"を使用してください。 –
本当ですか?すべてのデバイスやOSのバージョンでテストしましたか?私はこのことがテストの際に私のコードで直接起こることを目撃しました。 –
こんにちはベン、私はあなたがいくつかのデバイスとOSバージョンでそれを見たことを疑うことはありません。つまり、私は 'performSelector'がparamについて気にすることは決して見たことがありませんでした。それがどんなデバイスとOSバージョンだったのか –
- 1. 通知カテゴリの登録方法を教えてください。
- 2. AppDelegate以外のプッシュ通知の受け入れをユーザーに求める方法を教えてください。
- 3. システムドサービスライフサイクルイベントの登録方法を教えてください。
- 4. 場所を開くためにアプリケーションを登録する方法
- 5. サーバーレスプロジェクトで移行を続ける方法/場所を教えてください。
- 6. 通知が通知されたときに通知を受け取る方法
- 7. DLLを登録せずにオブジェクト指向ライブラリをExcelに公開する方法を教えてください。
- 8. 春にトランザクションを受け取ったときにページを更新する方法を教えてください。
- 9. DEVセンター通知を受け取るためのUWP(WinJS)アプリの登録
- 10. ユーザーがログアウトしたときにプッシュ通知を取得する方法を教えてください。
- 11. ホワイトリストに登録されたウェブサイトのみにiFrameを埋め込む方法を教えてください。
- 12. 登録されたクライアントがいくつかのAPIにアクセスする方法を教えてください。
- 13. コードにアップグレードする場所を教えてください。
- 14. 通知バーをプログラムでバックアップする方法を教えてください。
- 15. DetailViewの場合、user_urlをsite.com/user_url/gallery/slugに登録する方法を教えてください。
- 16. スクリプトの所有者を知る方法を教えてください。
- 17. net-snmp:新しいエンタープライズトラップの登録方法を教えてください。
- 18. Javaにネイティブライブラリを見つける場所を教えてください。
- 19. プッシュ通知登録]タブの場所
- 20. アップルプッシュ通知の登録場所:アプリコード
- 21. State Machine Completionについての通知方法を教えてください。
- 22. numpyにオブジェクトをfloatとして受け入れる方法を教えてください。
- 23. テストファイルを探す場所をMochaに教えてください
- 24. ウィジェットで「What's This」ボタンがクリックされたときに通知を受け取る方法を教えてください。
- 25. Bluetoothデバイスがどのデバイスとペア設定されるたびに通知を受け取るか、デバイスがペアデバイスを検出したときに通知を受け取る方法を教えてください。
- 26. ユーザーが2段階認証を有効にしたときに更新通知を受け取る方法を教えてください。
- 27. 文字列内でのタイトルの登録方法を教えてください。
- 28. データベースファイルが変更されたときに、SQLiteがアプリケーションに通知する方法を教えてください。
- 29. オブジェクトをガベージコレクションする方法を教えてください。
- 30. IntentService内に登録されたリスナーは、一度だけ通知を受け取ります
そのクラスのdeallocでremoveObserverを呼び出すことを忘れないでください。 – Abizern
編集できません。セレクタは@セレクタ(handleMemoryWarning :) – DougW
私は最初にコードタグを使用することを怠っている必要があります - 固定。 – m4rkk