NSThread也是iOS實(shí)現(xiàn)多線程的一種解決方案,是objc語言。線程的生命周期也是程序員管理。
- 一個(gè)NSThread對象就是一個(gè)線程。
- 用NSThread創(chuàng)建線程有三種方法。
方法1:
- (void)createThread1
{
// 創(chuàng)建線程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(download:) object:@"http://b.png"];
//給線程設(shè)置名字
thread.name = @"下載線程";
// 啟動(dòng)線程(調(diào)用self的download方法)
[thread start];
}
- 這種方法的特點(diǎn)是可以拿到線程對象thread,可以對此對象進(jìn)行一些操作,如設(shè)置名字等。
- 注意:創(chuàng)建線程對象之后要調(diào)用-start操作,才會(huì)開啟線程。
方法2:
- (void)createThread2
{
[NSThread detachNewThreadSelector:@selector(download:) toTarget:self withObject:@"http://a.jpg"];
}
- 這種方式創(chuàng)建線程可以直接啟動(dòng),但是不能拿到線程對象。
方法3:
- (void)createThread3
{
[self performSelectorInBackground:@selector(download:) withObject:@"http://c.gif"];
}
- 這個(gè)方法是隱式的創(chuàng)建新的線程,并開啟線程進(jìn)行對應(yīng)的操作。
- 注意方法中的
InBackground,這個(gè)方法區(qū)別于下面的方法。
[self performSelector:@selector(download:) withObject:@"http://c.gif"];
- 這個(gè)方法不會(huì)創(chuàng)建線程,會(huì)在當(dāng)前線程中進(jìn)行操作。
開啟線程調(diào)用的download方法實(shí)現(xiàn)如下:
- (void)download:(NSString *)url
{
NSLog(@"下載東西---%@---%@", url, [NSThread currentThread]);
}
- 這個(gè)方法就是模擬下載操作,并且打印當(dāng)前線程,在
方法1中調(diào)用此方法會(huì)會(huì)打印出線程的名字是下載線程
有的時(shí)候我們b不知道當(dāng)前的線程是主線程還是子線程,這時(shí)候就可以調(diào)用方法[NSThread currentThread];來判斷。
另外可以調(diào)用方法[NSThread mainThread];來拿到主線程進(jìn)行線程之間的通信,那么什么是線程間通信呢?
線程間通信
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。