機能を同期しようとすると、多くの投稿が通知に対してアドバイスするようですが、誤ってオブジェクトを保持してメモリの問題を引き起こす可能性があるため、閉鎖コールバックに注意する他の投稿もあります。通知とネットワークコールのコールバッククロージャを選択する際のメモリについての懸念はありますか?
foo
のカスタムビューコントローラの内部に、Bar
クラスを使用してサーバーからデータを取得するものとします。
class CustomViewController : UIViewController {
function foo() {
// Do other stuff
// Use Bar to get data from server
Bar.getServerData()
}
}
オプション1:コールバックを受け入れるようにgetServerData
を定義します。 CustomViewController
の中にクロージャとしてコールバックを定義します。
オプション2:コールバックの代わりにNSNotifications
を使用してください。 getServerData
の中に、サーバーがデータを返すときにNSNotification
を転記し、通知のためにCustomViewController
が登録されていることを確認します。
オプション1は、NSNotification
(コンパイラチェック、トレーサビリティなど)に注意しているが、コールバックを使用しないと、CustomViewController
が不必要に保持され、メモリの問題が発生する可能性があるという潜在的な問題を引き起こします。
もしそうなら、コールバックを使用してリスクを軽減する正しい方法はありますが、クロージャを使用することはありませんか?言い換えれば、getServerData
コールバックと一致するシグニチャを持つCustomViewController
の中に関数を定義し、この関数へのポインタをgetServerData
に渡しますか?
IMHOはどちらも有効なアプローチです。オプション1ははるかに簡潔で分かりやすく、簡単に正しいです。したがって、オプション1が好ましい。しかし、あなたはいくつかの他の答えによって間違っているように思えます。メモリ管理と同期は直交する概念であり、独自の問題の根源を持っています。 – CouchDeveloper