Smi*_*key 0 multithreading objective-c background-process nstimer
我有一个方法,我在后台运行,通过调用
[self performSelectorInBackground:@selector(getTweets) withObject:nil];
Run Code Online (Sandbox Code Playgroud)
'getTweets'调用包装器类中的方法,该方法获取推文并在准备好时发布通知.我有一个观察者在发生这种情况时触发'showTweets'.
当调用showTweets时,我想以5秒的延迟调用'hideTweets'.我这样做是通过调用:
self.hideTweetTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(hideTweet) userInfo:nil repeats:NO];
Run Code Online (Sandbox Code Playgroud)
然而它似乎没有发射.我还有一个调用showTweets方法的按钮,但是当它被按下时,它似乎陷入了isHighlighted状态.
由于最初的调用是在后台线程中,我做错了什么?
我试过了
[[NSRunLoop currentRunLoop] addTimer:self.hideTweetTimer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
Run Code Online (Sandbox Code Playgroud)
这似乎可以隐藏推文,但这似乎会导致性能问题.例如,当我在不同的屏幕上加载UIScrollView时,滚动非常粘.
基本上,我所有的问题似乎都来自于在后台线程上执行某些操作,但我不确定是什么......任何帮助都非常感激.谢谢.
小智 7
您是否从这些线程修改UI元素?应该处理UI的唯一线程是主线程.其他线程应该将它们的需求传达给主线程,实际上它将为它们执行.
您可以使用以下命令将某些内容调回主线程:
[self performSelectorOnMainThread:@selector(method) withObject:nil waitUntilDone:YES];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5752 次 |
| 最近记录: |