ITPub博客

首页 > 应用开发 > IT综合 > NSThread的简单使用 及performSelectorInBackground:withObject

NSThread的简单使用 及performSelectorInBackground:withObject

原创 IT综合 作者:gaohongfeng 时间:2014-01-29 14:46:32 0 删除 编辑

在ios开发过程中,经常会遇到在服务器端获取完数据通过后台使用多线程方式自动更新UI,通常的做法有两种:

1、使用NSObject类的方法performSelectorInBackground:withObject:来创建一个线程。

具体的代码:

[Object performSelectorInBackground:@selector(doSomething:) withObject:nil];

2、选择使用NSThread实现多线程。

NSThread创建主要有两种方式:

(1):

[NSThread detachNewThreadSelector:@selector(doSomething:) toTarget:self withObject:nil];

(2):

NSThread* myThread = [[NSThread alloc] initWithTarget:self   selector:@selector(doSomething:) object:nil];

[myThread start];

这两种方式的区别在于:

前一种调用就会立即创建一个线程并执行selector方法;第二种方式尽管alloc了一个新Thread,但需要手动调用start方法来启动线程。这点与Java创建线程的方式相似。

第一种方式,与上述做法1使用NSObject的类方法performSelectorInBackground:withObject:是一样的;第二种方式的可以在start真正创建线程之前对其进行设置,比如设置线程的优先级。

注意:

- (void) doSomething:(id)sender

{

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    //执行你的代码

   [pool release];

}

在多线程的执行方法doSomething中需要自行管理内存的释放,否则可能会警告提示:

XXXXX nsthread autoreleased with no pool in place – just leaking


补充:如果要更新UI必须回到主线程中,可以用performSelectorOnMainThread回到主线程(更新UI的话必须到主线程),用或者调用或者调用 委托函数,在主线程中实现委托函数

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12231606/viewspace-1076439/,如需转载,请注明出处,否则将追究法律责任。

上一篇: iOS中的系统通知
请登录后发表评论 登录
全部评论

注册时间:2014-01-25

  • 博文量
    38
  • 访问量
    256533