国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

IOS多線程開發(fā)之線程的狀態(tài)

2020-07-26 03:30:49
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

大家都知道,在開發(fā)過(guò)程中應(yīng)該盡可能減少用戶等待時(shí)間,讓程序盡可能快的完成運(yùn)算。可是無(wú)論是哪種語(yǔ)言開發(fā)的程序最終往往轉(zhuǎn)換成匯編語(yǔ)言進(jìn)而解釋成機(jī)器碼來(lái)執(zhí)行。但是機(jī)器碼是按順序執(zhí)行的,一個(gè)復(fù)雜的多步操作只能一步步按順序逐個(gè)執(zhí)行。改變這種狀況可以從兩個(gè)角度出發(fā):對(duì)于單核處理器,可以將多個(gè)步驟放到不同的線程,這樣一來(lái)用戶完成UI操作后其他后續(xù)任務(wù)在其他線程中,當(dāng)CPU空閑時(shí)會(huì)繼續(xù)執(zhí)行,而此時(shí)對(duì)于用戶而言可以繼續(xù)進(jìn)行其他操作;對(duì)于多核處理器,如果用戶在UI線程中完成某個(gè)操作之后,其他后續(xù)操作在別的線程中繼續(xù)執(zhí)行,用戶同樣可以繼續(xù)進(jìn)行其他UI操作,與此同時(shí)前一個(gè)操作的后續(xù)任務(wù)可以分散到多個(gè)空閑CPU中繼續(xù)執(zhí)行(當(dāng)然具體調(diào)度順序要根據(jù)程序設(shè)計(jì)而定),及解決了線程阻塞又提高了運(yùn)行效率。蘋果從iPad2 開始使用雙核A5處理器(iPhone中從iPhone 4S開始使用),A7中還加入了協(xié)處理器,如何充分發(fā)揮這些處理器的性能確實(shí)值得思考。今天將重點(diǎn)分析iOS多線程開發(fā):

一、簡(jiǎn)單介紹

線程的創(chuàng)建:

復(fù)制代碼 代碼如下:

self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];

說(shuō)明:創(chuàng)建線程有多種方式,這里不做過(guò)多的介紹。

線程的開啟:

復(fù)制代碼 代碼如下:

[self.thread start];

線程的運(yùn)行和阻塞:

(1)設(shè)置線程阻塞1,阻塞2秒

[NSThread sleepForTimeInterval:2.0];

(2)第二種設(shè)置線程阻塞2,以當(dāng)前時(shí)間為基準(zhǔn)阻塞4秒

復(fù)制代碼 代碼如下:

NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0];
[NSThread sleepUntilDate:date];

線程處理阻塞狀態(tài)時(shí)在內(nèi)存中的表現(xiàn)情況:(線程被移出可調(diào)度線程池,此時(shí)不可調(diào)度)


線程的死亡:

當(dāng)線程的任務(wù)結(jié)束,發(fā)生異常,或者是強(qiáng)制退出這三種情況會(huì)導(dǎo)致線程的死亡。


線程死亡后,線程對(duì)象從內(nèi)存中移除。

二、代碼示例

代碼示例1:

//// YYViewController.m// -NSThread-線程的狀態(tài)//// Created by apple on --.// Copyright (c) 年 itcase. All rights reserved.//#import "YYViewController.h"@interface YYViewController ()@property(nonatomic,strong)NSThread *thread;@end@implementation YYViewController- (void)viewDidLoad{[super viewDidLoad];//創(chuàng)建線程self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];//設(shè)置線程的名稱[self.thread setName:@"線程A"];}//當(dāng)手指按下的時(shí)候,開啟線程-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{//開啟線程[self.thread start];}-(void)test{//獲取線程N(yùn)SThread *current=[NSThread currentThread];NSLog(@"test---打印線程---%@",self.thread.name);NSLog(@"test---線程開始---%@",current.name);//設(shè)置線程阻塞,阻塞秒NSLog(@"接下來(lái),線程阻塞秒");[NSThread sleepForTimeInterval:.];//第二種設(shè)置線程阻塞,以當(dāng)前時(shí)間為基準(zhǔn)阻塞秒NSLog(@"接下來(lái),線程阻塞秒");NSDate *date=[NSDate dateWithTimeIntervalSinceNow:.];[NSThread sleepUntilDate:date];for (int i=; i<; i++) {NSLog(@"線程--%d--%@",i,current.name);}NSLog(@"test---線程結(jié)束---%@",current.name);}@end 

打印查看:


代碼示例2(退出線程):

//// YYViewController.m// -NSThread-線程的狀態(tài)//// Created by apple on --.// Copyright (c) 年 itcase. All rights reserved.//#import "YYViewController.h"@interface YYViewController ()@property(nonatomic,strong)NSThread *thread;@end@implementation YYViewController- (void)viewDidLoad{[super viewDidLoad];//創(chuàng)建線程self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];//設(shè)置線程的名稱[self.thread setName:@"線程A"];}//當(dāng)手指按下的時(shí)候,開啟線程-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{//開啟線程[self.thread start];}-(void)test{//獲取線程N(yùn)SThread *current=[NSThread currentThread];NSLog(@"test---打印線程---%@",self.thread.name);NSLog(@"test---線程開始---%@",current.name);//設(shè)置線程阻塞,阻塞秒NSLog(@"接下來(lái),線程阻塞秒");[NSThread sleepForTimeInterval:.];//第二種設(shè)置線程阻塞,以當(dāng)前時(shí)間為基準(zhǔn)阻塞秒NSLog(@"接下來(lái),線程阻塞秒");NSDate *date=[NSDate dateWithTimeIntervalSinceNow:.];[NSThread sleepUntilDate:date];for (int i=; i<; i++) {NSLog(@"線程--%d--%@",i,current.name);if (==i) {//結(jié)束線程[NSThread exit];}}NSLog(@"test---線程結(jié)束---%@",current.name);}@end 

打印示例:


注意:人死不能復(fù)生,線程死了也不能復(fù)生(重新開啟),如果在線程死亡之后,再次點(diǎn)擊屏幕嘗試重新開啟線程,則程序會(huì)掛。

以上內(nèi)容是小編給大家介紹的IOS多線程開發(fā)之線程的狀態(tài) ,希望大家喜歡。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阳高县| 虹口区| 汾阳市| 梅河口市| 安泽县| 修文县| 张掖市| 太谷县| 达尔| 始兴县| 霞浦县| 建宁县| 怀来县| 台南县| 乐山市| 赤城县| 济南市| 吉木乃县| 来宾市| 革吉县| 和林格尔县| 琼海市| 错那县| 保山市| 富民县| 永顺县| 罗江县| 胶南市| 合作市| 眉山市| 响水县| 青河县| 华蓥市| 霍林郭勒市| 南郑县| 襄垣县| 武安市| 武平县| 太保市| 临夏县| 来宾市|