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

首頁 > 系統 > iOS > 正文

IOS多線程開發之線程的狀態

2019-10-21 18:56:37
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了IOS多線程開發之線程的狀態 的相關資料,需要的朋友可以參考下
 

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

一、簡單介紹

線程的創建:

 

復制代碼代碼如下:

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

 

說明:創建線程有多種方式,這里不做過多的介紹。

IOS多線程開發之線程的狀態

線程的開啟:

 

復制代碼代碼如下:

[self.thread start];

 

IOS多線程開發之線程的狀態

線程的運行和阻塞:

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

[NSThread sleepForTimeInterval:2.0];

(2)第二種設置線程阻塞2,以當前時間為基準阻塞4秒

 

復制代碼代碼如下:

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

 

IOS多線程開發之線程的狀態

線程處理阻塞狀態時在內存中的表現情況:(線程被移出可調度線程池,此時不可調度)

IOS多線程開發之線程的狀態

線程的死亡:

當線程的任務結束,發生異常,或者是強制退出這三種情況會導致線程的死亡。

IOS多線程開發之線程的狀態

線程死亡后,線程對象從內存中移除。

IOS多線程開發之線程的狀態

二、代碼示例

代碼示例1:

//// YYViewController.m// -NSThread-線程的狀態//// 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];//創建線程self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];//設置線程的名稱[self.thread setName:@"線程A"];}//當手指按下的時候,開啟線程-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{//開啟線程[self.thread start];}-(void)test{//獲取線程NSThread *current=[NSThread currentThread];NSLog(@"test---打印線程---%@",self.thread.name);NSLog(@"test---線程開始---%@",current.name);//設置線程阻塞,阻塞秒NSLog(@"接下來,線程阻塞秒");[NSThread sleepForTimeInterval:.];//第二種設置線程阻塞,以當前時間為基準阻塞秒NSLog(@"接下來,線程阻塞秒");NSDate *date=[NSDate dateWithTimeIntervalSinceNow:.];[NSThread sleepUntilDate:date];for (int i=; i<; i++) {NSLog(@"線程--%d--%@",i,current.name);}NSLog(@"test---線程結束---%@",current.name);}@end 

打印查看:

IOS多線程開發之線程的狀態

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

//// YYViewController.m// -NSThread-線程的狀態//// 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];//創建線程self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];//設置線程的名稱[self.thread setName:@"線程A"];}//當手指按下的時候,開啟線程-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{//開啟線程[self.thread start];}-(void)test{//獲取線程NSThread *current=[NSThread currentThread];NSLog(@"test---打印線程---%@",self.thread.name);NSLog(@"test---線程開始---%@",current.name);//設置線程阻塞,阻塞秒NSLog(@"接下來,線程阻塞秒");[NSThread sleepForTimeInterval:.];//第二種設置線程阻塞,以當前時間為基準阻塞秒NSLog(@"接下來,線程阻塞秒");NSDate *date=[NSDate dateWithTimeIntervalSinceNow:.];[NSThread sleepUntilDate:date];for (int i=; i<; i++) {NSLog(@"線程--%d--%@",i,current.name);if (==i) {//結束線程[NSThread exit];}}NSLog(@"test---線程結束---%@",current.name);}@end 

打印示例:

IOS多線程開發之線程的狀態

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

IOS多線程開發之線程的狀態

以上內容是小編給大家介紹的IOS多線程開發之線程的狀態 ,希望大家喜歡。



注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临武县| 高雄市| 绿春县| 宁明县| 金华市| 洪江市| 青神县| 咸丰县| 探索| 商都县| 淳化县| 玉树县| 鲁山县| 云和县| 永新县| 安徽省| 阳新县| 剑河县| 陆河县| 蒙山县| 广饶县| 青海省| 东城区| 汝城县| 平顺县| 根河市| 洛南县| 任丘市| 开化县| 南召县| 甘孜县| 虎林市| 灵寿县| 高清| 蓝山县| 右玉县| 聂荣县| 德庆县| 乐平市| 阳城县| 镇平县|