欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2015年12月18日 14:33:41   作者:187n  
這篇文章主要介紹了IOS多線程開發(fā)之線程的狀態(tài) 的相關(guān)資料,需要的朋友可以參考下

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

一、簡單介紹

線程的創(chuàng)建:

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

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

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

線程的開啟:

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

[self.thread start];

線程的運行和阻塞:

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

[NSThread sleepForTimeInterval:2.0];

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

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

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

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


線程的死亡:

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


線程死亡后,線程對象從內(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"];
}
//當手指按下的時候,開啟線程
-(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);
//設(shè)置線程阻塞,阻塞秒
NSLog(@"接下來,線程阻塞秒");
[NSThread sleepForTimeInterval:.];
//第二種設(shè)置線程阻塞,以當前時間為基準阻塞秒
NSLog(@"接下來,線程阻塞秒");
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"];
}
//當手指按下的時候,開啟線程
-(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);
//設(shè)置線程阻塞,阻塞秒
NSLog(@"接下來,線程阻塞秒");
[NSThread sleepForTimeInterval:.];
//第二種設(shè)置線程阻塞,以當前時間為基準阻塞秒
NSLog(@"接下來,線程阻塞秒");
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ù)生(重新開啟),如果在線程死亡之后,再次點擊屏幕嘗試重新開啟線程,則程序會掛。

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

相關(guān)文章

  • iOS實現(xiàn)比例拼圖的方法示例

    iOS實現(xiàn)比例拼圖的方法示例

    這篇文章主要給大家介紹了關(guān)于iOS實現(xiàn)比例拼圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者開發(fā)iOS具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • iOS安全防護系列之字符串及系統(tǒng)函數(shù)隱藏詳解

    iOS安全防護系列之字符串及系統(tǒng)函數(shù)隱藏詳解

    這篇文章主要給大家介紹了關(guān)于iOS安全防護系列之字符串及系統(tǒng)函數(shù)隱藏的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • iOS中FMDB事務(wù)實現(xiàn)批量更新數(shù)據(jù)

    iOS中FMDB事務(wù)實現(xiàn)批量更新數(shù)據(jù)

    這篇文章主要為大家詳細介紹了iOS中FMDB事務(wù)實現(xiàn)批量更新數(shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • IOS實現(xiàn)手動截圖并保存

    IOS實現(xiàn)手動截圖并保存

    這篇文章主要介紹了IOS實現(xiàn)手動剪裁圖片并保存到相冊,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • IOS使用UICollectionView實現(xiàn)無限輪播效果

    IOS使用UICollectionView實現(xiàn)無限輪播效果

    這篇文章主要為大家詳細介紹了IOS使用UICollectionView實現(xiàn)無限輪播效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • IOS圖片設(shè)置毛玻璃效果

    IOS圖片設(shè)置毛玻璃效果

    這篇文章主要介紹了IOS圖片設(shè)置毛玻璃效果的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • 淺談iOS 屏幕方向那點事兒

    淺談iOS 屏幕方向那點事兒

    這篇文章主要介紹了淺談iOS 屏幕方向那點事兒,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • IOS 中UITextField,UITextView,UILabel 根據(jù)內(nèi)容來計算高度

    IOS 中UITextField,UITextView,UILabel 根據(jù)內(nèi)容來計算高度

    這篇文章主要介紹了IOS 中UITextField,UITextView,UILabel 根據(jù)內(nèi)容來計算高度的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • iOS umeng 獲取deviceToken的方法

    iOS umeng 獲取deviceToken的方法

    下面小編就為大家分享一篇iOS umeng 獲取deviceToken的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • iOS Crash常規(guī)跟蹤方法及Bugly集成運用詳細介紹

    iOS Crash常規(guī)跟蹤方法及Bugly集成運用詳細介紹

    這篇文章主要介紹了iOS Crash常規(guī)跟蹤方法及Bugly集成運用詳細介紹的相關(guān)資料,需要的朋友可以參考下
    2016-10-10

最新評論