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 回答