この質問はおそらく他のものと似ていますが、私はそうではないと思います。UITableViewCell/UICollectionViewCellのコンテキスト
は簡単に行く...
は、それが最善の方法は、一般的なベストプラクティスでのUITableViewCell/UICollectionViewCellサブクラスに不透明なコンテキストオブジェクト(void *型/ ID/ANYOBJECT)を設定し、あなたのためですか?
なぜこの質問がありますか? UITableView/UICollectionViewは非同期で構築されていることが分かりますが、これはクラッシュや間違ったデータの使用を避けるための良い解決策と考えることができます。
私を説明しましょう。 おそらく、大多数のiOS開発者は、セル自体の何らかの対話に反応するためにセルを渡すために使用されたデリゲートオブジェクトを使用して、UITableViewCellをサブクラス化する必要が少なくとも1回発生しました。
デリゲート(ViewController)はおそらく、セルのインデックスパスを検索して、関連するデータオブジェクトを発見し、そのデータでいくつかの処理を行います。大丈夫だが、テーブルビューがリモートデータ更新のために再ロードされたが非同期プロセスであるためにデリゲートメッセージが配信されてしまうことが多く発生する...
最悪の場合、クラッシュする最良の場合、間違ったデータオブジェクトを処理します。
したがって、これまでのように、デリゲートメッセージに送信されたセルからコンテキストを取り戻すセルデリゲートが使用できるセルサブクラスによって保持された不透明なオブジェクト(コンテキスト)を解決することができます。明らかに、再利用のために、prepareForReuse中にセルクラスをコンテキストからクリーンアップする必要があります。
TableViewCell モデルについてはは分かりませんが、デリゲートの郵便配達員として機能します。
あなたはどう思いますか?
もちろん、デリゲートへのメッセージはメインスレッドで同期して送信されます。私が説明したのは、TableViewがリモートから更新されている場合にのみ見ることができます...実際のライブアップデートについて考えてみましょう。 – Gabriele
TableViewのリロードが一度行われると、すべてのデータソースメッセージが同じ実行ループで送信されるわけではありません。これがフレームワークの構築方法です。このため、reloadDataが発生し、現在の古いセルのユーザー対話は、reloadDataの後のフレームワークによって送信されます。これは間違いの原因ではなく、フレームワークがこのように動作するために発生します。 – Gabriele