NSRunLoop概述和原理

2021-09-06 05:21:35 字數 2023 閱讀 8102

iphone開發-nsrunloop概述和原理

1.什麼是nsrunloop?

我們會經常看到這樣的**:

- (ibaction)start:(id)sender

[progress sethidden:yes];}

利用nsrunloop阻塞nsoperation執行緒

在使用nsoperationqueue簡化多執行緒開發中介紹了多執行緒的開發,我這裡主要介紹一下使用nsrunloop阻塞執行緒。

主要使用在nstimer定時啟用的任務或者非同步獲取資料的情況如socket獲取網路資料,要阻塞執行緒,直到獲取資料之後在釋放執行緒。

下面是執行緒中沒有使用nsrunloop阻塞執行緒的**和執行效果:

執行緒類:

#import

@inte***ce mytask : nsoperation  

@end

#import "mytask.h" 

@implementation mytask 

-(void)main     

-(void)hiandetime:(id)sender      

-(void)dealloc      

@end

執行緒新增到佇列中:

- (void)viewdidload     

執行結果是:

2011-07-25 09:44:45.393 operationdemo[20676:1803] 開始執行緒=

2011-07-25 09:44:45.393 operationdemo[20676:5d03] 開始執行緒=

2011-07-25 09:44:45.396 operationdemo[20676:1803] 開始執行緒=

2011-07-25 09:44:45.404 operationdemo[20676:6303] delloc mytask=

2011-07-25 09:44:45.404 operationdemo[20676:5d03] delloc mytask=

2011-07-25 09:44:45.405 operationdemo[20676:6303] delloc mytask=

可以看到,根本沒有執行nstimer中的方法,執行緒就釋放掉了,我們要執行

nstimer中的方法,就要利用nsrunloop阻塞執行緒。下面是修改後的**:

-(void)main     

}

執行結果如下:

2011-07-25 10:07:00.543 operationdemo[21270:1803] 開始執行緒=

2011-07-25 10:07:00.543 operationdemo[21270:5d03] 開始執行緒=

2011-07-25 10:07:00.550 operationdemo[21270:6303] 開始執行緒=

2011-07-25 10:07:00.550 operationdemo[21270:1803] 執行了nstimer      

2011-07-25 10:07:00.551 operationdemo[21270:5d03] 執行了nstimer      

2011-07-25 10:07:00.552 operationdemo[21270:6303] 執行了nstimer      

2011-07-25 10:07:00.556 operationdemo[21270:6503] delloc mytask=

2011-07-25 10:07:00.557 operationdemo[21270:6303] delloc mytask=

2011-07-25 10:07:00.557 operationdemo[21270:5d03] delloc mytask=

我們可以使用nsrunloop進行執行緒阻塞。

NSRunLoop概述和原理

1.什麼是nsrunloop?我們會經常看到這樣的 1 2 3 4 5 6 7 8 9 10 ibaction start id sender progress sethidden yes 2.nsrunloop工作原理 接下來看一下nsrunloop具體的工作原理,首先是官方文件提供的說法,看圖 ...

NSRunLoop概述和原理

1.什麼是nsrunloop?我們會經常看到這樣的 1 2 3 4 5 6 7 8 9 10 ibaction start id sender progress sethidden yes 2.nsrunloop工作原理 接下來看一下nsrunloop具體的工作原理,首先是官方文件提供的說法,看圖 ...

NSRunLoop 概述和原理

1.什麼是nsrunloop?我們會經常看到這樣的 ibaction start id sender progress sethidden yes 這段 很神奇的,因為他會 暫停 執行,而且程式執行不會因為這裡有乙個while迴圈而受到影響。在 progress sethidden no 執行之後,...