IOS学习--performSelectorOnMainThread
2014-04-10 22:06
274 查看
iphone开发中,在主线程之外的线程更新主线程所显示的界面元素,不能直接调用主线程的类的更新界面的方法,否则界面看不到任何结果
.而是需要有个缓冲,叫做performSelectorOnMainThread
类似android的activity.runOnUIThread(new Runnable(){
public void run () {
...................
}
});
使用方法是,在线程调用到更新界面那个类的时候,在更新界面前,通过如下调用.
[self performSelectorOnMainThread:@selector(updateLabel:) withObject:updateData waitUntilDone:YES];
比如说你已经定义了一个- (void)updateLabel:(NSString *)txt{}的方法.在此方法中更新界面即可.即时看到结果。
注意点
1:
发现一个问题,就是如果从另外一个线程向主线程传对象updateData,如果你这个updateData在调用performSelectorOnMainThread之后马上释放的话
到真正@selector那个方法取updateData的时候已经不可用了.建议使用lock机制访问资源。
2:如果主线程忙于其他的事情,子线程即使调用performSelectorOnMainThread更新了也不会更新在界面上。
.而是需要有个缓冲,叫做performSelectorOnMainThread
类似android的activity.runOnUIThread(new Runnable(){
public void run () {
...................
}
});
使用方法是,在线程调用到更新界面那个类的时候,在更新界面前,通过如下调用.
[self performSelectorOnMainThread:@selector(updateLabel:) withObject:updateData waitUntilDone:YES];
比如说你已经定义了一个- (void)updateLabel:(NSString *)txt{}的方法.在此方法中更新界面即可.即时看到结果。
注意点
1:
发现一个问题,就是如果从另外一个线程向主线程传对象updateData,如果你这个updateData在调用performSelectorOnMainThread之后马上释放的话
到真正@selector那个方法取updateData的时候已经不可用了.建议使用lock机制访问资源。
2:如果主线程忙于其他的事情,子线程即使调用performSelectorOnMainThread更新了也不会更新在界面上。
相关文章推荐
- CocoaPods管理依赖库
- xcode快捷键
- 最详细在Windows安装Xamarin.iOS教程
- iOS中高级工程师所要知道的问题
- iOS6和iOS7代码的适配(1)
- 使用ReactiveCocoa实现iOS平台响应式编程
- 定制iOS 7中的导航栏和状态栏
- IOS自带正则表达式NSPredicate的使用
- IOS添加通讯录
- IOS添加通讯录
- iOS7开发者不可不知道的10件设计思路
- Nagios4.0.4 + Centreon2.5.0安装
- ios 正则表达式
- 如何判断ios设备中是否安装了某款应用
- iOS工程中的info.plist文件的完整研究
- 小小_关于IOS库文件的问题
- iOS GCD 理解
- iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用
- iOS 如何在一个应用程序中调用另一个应用程序
- ios开发——CellForRowAtIndexPath方法不执行分析