iOS多線程(二)-- NSThread

NSThread也是iOS實現(xiàn)多線程的一種解決方案,是objc語言。線程的生命周期也是程序員管理。

  • 一個NSThread對象就是一個線程。
  • 用NSThread創(chuàng)建線程有三種方法。

方法1:

- (void)createThread1
{
    // 創(chuàng)建線程
    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(download:) object:@"http://b.png"];
    //給線程設(shè)置名字
    thread.name = @"下載線程";
    // 啟動線程(調(diào)用self的download方法)
    [thread start];
}
  • 這種方法的特點是可以拿到線程對象thread,可以對此對象進(jìn)行一些操作,如設(shè)置名字等。
  • 注意:創(chuàng)建線程對象之后要調(diào)用-start操作,才會開啟線程。

方法2:

- (void)createThread2
{
    [NSThread detachNewThreadSelector:@selector(download:) toTarget:self withObject:@"http://a.jpg"];
}
  • 這種方式創(chuàng)建線程可以直接啟動,但是不能拿到線程對象。

方法3:

- (void)createThread3
{
    [self performSelectorInBackground:@selector(download:) withObject:@"http://c.gif"];
}
  • 這個方法是隱式的創(chuàng)建新的線程,并開啟線程進(jìn)行對應(yīng)的操作。
  • 注意方法中的InBackground,這個方法區(qū)別于下面的方法。
[self performSelector:@selector(download:) withObject:@"http://c.gif"];
  • 這個方法不會創(chuàng)建線程,會在當(dāng)前線程中進(jìn)行操作。
開啟線程調(diào)用的download方法實現(xiàn)如下:
- (void)download:(NSString *)url
{
    NSLog(@"下載東西---%@---%@", url, [NSThread currentThread]);
}
  • 這個方法就是模擬下載操作,并且打印當(dāng)前線程,在方法1中調(diào)用此方法會會打印出線程的名字是下載線程
有的時候我們b不知道當(dāng)前的線程是主線程還是子線程,這時候就可以調(diào)用方法[NSThread currentThread];來判斷。
另外可以調(diào)用方法[NSThread mainThread];來拿到主線程進(jìn)行線程之間的通信,那么什么是線程間通信呢?

線程間通信

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容