1

iOSで、単一のビューアプリがあり、次を使用して新しいスレッドが作成された場合:

[NSThread detachNewThreadSelector:@selector(consumeData:) 
     toTarget:self.consumer withObject:self.queue];

ここで、consumerConsumerメソッド内のデータを処理するオブジェクトでconsumeDataあり、queueQueueオブジェクトであり、コンシューマーが処理するためのデータの取得元です。

しかし、スレッドがメインビューのスイッチがオンまたはオフに設定されているかどうかを確認する必要がある場合はどうなりますか?Consumerこれは、オブジェクトがその時点で作業を実行するか一時停止するかを切り替えることです。代わりにを使用して、 ViewControllerwithObject:self参照全体がスレッドに渡され、スレッドがviewController.view.______スイッチの値viewController.queueにアクセスし、キューにアクセスするために使用するようにする必要がありますか、それともより良いまたは代替の方法がありますか?

4

2 に答える 2

1

絶対違う。別のスレッドから UI 関連に触れることはできません。それは単に安全ではありません。他のスレッドがスイッチの現在の値を知る必要がある場合は、要求する前にメイン スレッドにコールバックする必要があります。

于 2012-08-23T23:30:01.827 に答える
0

サブクラスを作成すると、状態をオブジェクト内の変数に格納し、任意のスレッドからこれらの変数にアクセスできます。もちろん、これらの操作は UIKit で定義されたメソッドを呼び出しません。

于 2012-08-30T12:17:35.207 に答える