0

呼び出してバックグラウンドで実行するメソッドがあります

[self performSelectorInBackground:@selector(getTweets) withObject:nil];

「getTweets」は、ツイートを取得し、準備ができたときに通知を投稿するラッパー クラスのメソッドを呼び出します。これが発生したときに「showTweets」をトリガーするオブザーバーがあります。

showTweets が呼び出されたら、5 秒の遅延で「hideTweets」を呼び出したいと考えています。これを行うには、次のように呼び出します。

self.hideTweetTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self  selector:@selector(hideTweet) userInfo:nil repeats:NO];    

ただし発火しないようです。showTweets メソッドを呼び出すボタンもありますが、それを押すと isHighlighted 状態でスタックするようです。

最初の呼び出しはバックグラウンド スレッドで行われたため、何か問題がありますか?

私は試した

[[NSRunLoop currentRunLoop] addTimer:self.hideTweetTimer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];

これはツイートを非表示にすることで機能しているようですが、これはパフォーマンスの問題を引き起こすようです. たとえば、UIScrollView を別の画面にロードすると、スクロールが非常に遅くなります。

基本的に、私の問題はすべてバックグラウンド スレッドで何かを実行することから発生しているように見えますが、何が原因かわかりません...どんな助けも大歓迎です。ありがとう。

4

1 に答える 1

7

それらのスレッドから UI 要素を変更していますか? UI を処理する唯一のスレッドはメイン スレッドです。他のスレッドは、そのニーズをメイン スレッドに伝える必要があります。

次を使用して、メインスレッドに何かを呼び出すことができます。

[self performSelectorOnMainThread:@selector(method) withObject:nil waitUntilDone:YES];
于 2012-06-20T16:44:13.280 に答える