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] 開始執行緒=我們可以使用nsrunloop進行執行緒阻塞。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概述和原理
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 執行之後,...