0

GCD を使用する場合、オブジェクトの NSMutableArrayをロックしますが、オブジェクトの残りの部分はロックしません。私は、モーダルに LocationViewController に到達するまでに場所が存在することを期待して、init で gcd を介して場所の配列を設定するユーザー オブジェクトを持っています。user.locations(ユーザーがビューコントローラーに沿って渡される場所)、そこにない場合は、ピッカーに「読み込み中...」と表示するだけです。

dispatch_syncメソッド内のユーザーの gcd 内から強制的に更新したいと考えています。ピッカーなどを更新するメソッドを LocationViewController に追加できますが、これに安全にアクセスする方法がわかりません。

私の最初の考えは、場所がそこにない場合(つまり、nil)、ユーザーでこのLocationViewControllerへの参照を設定することでした。locContがnil でない場合はdispatch_sync、その中でメソッドを呼び出すことができます。[locCont mymethod]しかし、ユーザー クラスでプロパティを設定する方法がわかりません。

@property (strong, nonatomic) LocationsViewController * locCont;

私が心配しているのは、ユーザーがいつでもログアウトしてルートビューに戻ることができることです。次に設定します

user.locCont = nil

ARC は二日酔いの記憶を適切に分類しますか?

私のもう1つの懸念は、彼らが場所を設定することを選択せず​​、後で見る場合にどうなるかということです. user.locConta で nil に設定することでそれを処理できると思いprepareforsegueます。

ユーザーがそこにいる場合、LocationsViewController を更新するより良い方法はありますか?

4

2 に答える 2

2

「ユーザー」オブジェクトとView Controllerの間の強い接続を避けるために、通知を使用することをお勧めします。

initLocationViewController は、そのメソッドでカスタム通知を登録し、.で登録を解除しdeallocます。

GCD コードは、終了時に通知を「投稿」します。これにより、すべてのリスナーに通知が送信され、LocationViewController がそのビューを更新できるようになります。

NSNotificationCenterドキュメント を参照し、Objective-C で NSNotificationCenter を介してメッセージを送受信しますか? 開始に役立つ優れたサンプルコードについては。

于 2013-07-31T19:44:57.857 に答える
0

オブジェクトによって非同期にデータの取得が行われuser、View Controller がこのオブジェクトにアクセスできるようにする場合は、通常、このオブジェクトへの外部参照を維持しuserます。一般的なアプローチの 1 つは、このuserオブジェクトをシングルトンにすることです。もう 1 つは、アプリ デリゲートのプロパティにすることです。いずれにせよ、userオブジェクトはおそらくどのビュー コントローラーへの参照も維持しません。オブジェクトは非同期に情報を取得するだけで、ビュー コントローラーはシングルトンまたはアプリ デリゲートを介しuserてオブジェクトの現在の状態にアクセスできます。user

データの取得が完了したときにオブジェクトがView Controllerに通知できるようにする場合userは、通知センターを介して通知を投稿する必要があります。View Controller は、これらの通知を監視するために自分自身を登録できます (そして、View Controller が自分自身を閉じる前に、その通知のオブザーバーとしての自分自身を削除します)。

于 2013-07-31T19:45:57.793 に答える