iOS 开发 iOS Developer

多线程之一

2016-03-17  本文已影响0人  柯文李

处理耗时操作:不使用多线程

在iOS开发中,经常会遇到一些耗时操作,如果不使用多线程,将耗时操作放在主线程中,将会阻塞主线程,使得应用的UI界面阻塞。代码如下:

- (IBAction)buttonPressed {

for (NSUInteger i = 0; i < 20000; i ++) {
    NSLog(@"-------%zd----", i);
    }
}

当用户点击此方法关联的UIButton 后,主线程会执行一段耗时操作,图中红色按钮将处于不响应状态,textView和segmentView也无法操作,而要等待20000次打印后才能正常操作UI界面。这是我们在iOS开发中要避免的。


屏幕快照 2016-03-17 下午5.04.04.png

处理耗时操作,使用多线程

那么该如何处理上述所说的主线程阻塞问题呢?当然要用到多线程技术。苹果提供了很多多线程的解决方案:NSThread、GCD和NSOperation等。

NSThread

/** 封装耗时操作 
*/
- (void)run {
for (NSUInteger i = 0; i < 50000; i ++) {
    NSLog(@"-------%zd----", i);
  }
}

performSelectorInBackground:withObject: 这个方法可以将run方法放在后台线程中执行,第一个参数传入你想在后台执行的代码,类型为SEL,第二个参数为方法所带的参数,如果方法没有参数,则传入nil就可以了。

此时运行程序,点击按钮,将不会阻塞主线程。

这个方法有一个注意点,就是需要调用thread对象的start方法。

上一篇 下一篇

猜你喜欢

热点阅读