NSThread 创建线程和更新UI
来源:互联网 发布:找不到usb打印机端口 编辑:程序博客网 时间:2024/05/16 18:05
NSThread创建线程:
第一种:[NSThread detachNewThreadSelector:@selector(myThreadMainMethod:) toTarget:self withObject:nil];
第二种:NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(myThreadMainMethod:)object:nil];
[myThread start];
第一种是创建之后马上跑到myThreadMainMethod去做事情去了,而第二种还需要手动调用 start 函数,所以在启动线程之前,对线程进行配置,比如设置 stack 大小,线程优先级等;
更新UI:
-(void)changeText:(NSString *)str
{
[changeLable setText:str];
}
-(void)myThreadMainMethod
{
int i=0;
NSString * str=nil;
for(;i<20;i++)
{
printf("subThread is running i=%d\n",i);
str=[[NSString alloc]initWithFormat:@"%d",i];
NSLog(@"%@",str);
[self performSelectorOnMainThread:@selector(changeText:) withObject:str waitUntilDone:YES];
[NSThread sleepForTimeInterval:1.0];
}
}
- (void)viewDidLoad
{
changeLable= [[UILabel alloc]initWithFrame:CGRectMake(20, 230, 210, 41)];
[self.view addSubview:changeLable];
NSThread * myThread = [[NSThread alloc]initWithTarget:self selector:@selector(myThreadMainMethod) object:nil];
[myThread start];
[super viewDidLoad];
}
iphone开发中,在主线程之外的线程更新主线程所显示的界面元素,不能直接调用主线程的类的更新界面的方法,否则界面看不到任何结果
.而是需要有个缓冲,叫做
performSelectorOnMainThread
使用方法是,在线程调用到更新界面那个类的时候,在更新界面前,通过如下调用.
[self performSelectorOnMainThread:@selector(updateLabel:) withObject:updateData waitUntilDone:YES];
比如说你已经定义了一个- (void)updateLabel:(NSString *)txt{}的方法.在此方法中更新界面即可.即时看到结果.
- NSThread 创建线程和更新UI
- 使用NSThread创建线程
- NSThread创建线程
- NSThread和线程锁
- 利用NSThread创建新线程
- 用NSThread创建子线程
- NSThread创建和启动
- 类成员函数创建线程和MFC多线程UI更新问题
- iOS学习笔记---利用NSThread实现异步更新UI和下载图片
- 多线程NSThread的简单创建和使用——创建线程的几种方式
- Android 子线程创建消息队列更新UI
- NSThread创建线程的三种方式
- NSThread类三种创建线程的方式
- UI - NSThread
- UI更新的方法和在非UI线程里面,怎么更新UI信息。细细的
- 非UI线程更新UI!?
- IOS--UI--NSThread 和GCD 总结
- TimerTask 更新UI线程
- 嵌入式SQL与主语言的通信
- 文件格式解析:ISO9660 (ISO文件) -- Python
- Android 使用全局变量
- 跟我一起学makefile 和make manual
- JS 中如何将字符串转换成数字
- NSThread 创建线程和更新UI
- kettle组件开发小结
- Windows 7英文版访问2003或XP共享时提示用户名密码错误的解决办法
- ORA-01691: Lob 段 INSPECT.SYS_LOB0000052587C00011$$ 无法通过 8192 (在表空间 USERS 中) 扩展
- Could not find default endpoint element that references contract 'wcfXXXXXXXXXXX' in the ServiceMode
- 内部类(补充)
- C中fopen的mode参数中,b的使用区别
- magento在同一个页面实现登陆注册
- 岁月