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ù)。