1

私にはいくつかの基本的な疑問があります、誰かが私を助けてくれると思います。

この質問を参照してください:ファイルのダウンロード中にULabelをすぐに更新してください

performSelectorOnMainThread別のクラスでupdateProgressメソッドを呼び出しているを使用してみましたが、ラベルが更新されていません。

しかし今、私は次のような通知を使用しました

[[NSNotificationCenter defaultCenter] postNotificationName:@"updateProgress" object:nil userInfo:nil];

これはメソッドを呼び出しており、UILabelも更新しているようです。私の問題は解決しましたが、なぜ上記performSelectorOnMainThreadがうまくいかなかったのか知りたいですか?特定の理由はありますか?

4

2 に答える 2

1

performSelectorOnMainThread呼び出しを行うクラスとupdateProgressメソッドが同じクラスにある必要がありました。そうでない場合(あなたの場合)、呼び出されたクラスにメソッドを作成し、それを他のクラスに performSelectorOnMainThreadリダイレクトします。updateProgress

于 2012-07-10T11:58:31.730 に答える
0

performSelectorOnMainThread、メインスレッドでいくつかのコードを実行するために使用できます。別のクラスのメソッドを呼び出すメソッドではないようです(クラスの作業インスタンスがある場合は、これを使用して別のクラスのメソッドを呼び出すことができますが)。クラスの1つでAPI呼び出しを使用している場合、メインスレッドをブロックするため、API呼び出しを実行するために別のスレッドを使用する必要がある場合があります(アプリを使用するユーザーには親切ではありません)。したがって、iOSでは、メインスレッドからのみUIKitを呼び出す必要があります。

NSNotification、イベント呼び出しを取得するために使用されます。つまり、オブザーバーが通知を受け取るように登録した特定のイベントが発生すると、オブザーバーに通知します。

これがお役に立てば幸いです。

于 2012-07-10T11:29:05.013 に答える