iOS multiple threads(2)------NSOperation NSOper...

    首先,簡單區分這幾個類關鍵詞:
NSOperation:能夠理解程一個「操做」,一個要作的事件,感受相似如java中的runnable,NSOperation只有添加到線程隊列中才能被執行。
NSOperationQueue:能夠勉強的叫作線程隊列吧,他是專門管理添加到他裏面NSOperation,而後根據狀況,開啓線程執行對應的「操做」,java做用,也有對應的類,或者咱們本身寫一個隊列。
NSOperationQueue的目的就是多線程管理,一個NSOperationQueue 操做隊列,就至關於一個線程管理器,而非一個線程。由於你能夠設置這個線程管理器內能夠並行運行的的線程數量等等。

下面是創建並初始化一個操做隊列,並且咱們能夠設置這個隊列每次被處理的「操做(NSOperation)」數量: java

NSOperationQueue *aQ = [[NSOperationQueue alloc] init];
[aQ setMaxConcurrentOperationCount:10];
    而後,咱們後面就能夠創建須要操做的任務啦,而後加到操做隊列中,就能夠實現隊多線程啦,ios中,使用NSInvocationOperation(NSOperation的子類)是最簡單的多線程編程方式,在iPhone編程中是常常被用到的

/建立一個NSInvocationOperation對象,並初始化到方法
    //在這裏,selector參數後的值是你想在另一個線程中運行的方法(函數,Method)
    //在這裏,object後的值是想傳遞給前面方法的數據
NSInvocationOperation* theOp = [[NSInvocationOperation alloc] initWithTarget:self
                    selector:@selector(myTaskMethod:) object:data];
 
    // 下面將咱們創建的操做「Operation」加入到本地程序的共享隊列中(加入後方法就會馬上被執行)
    // 更多的時候是由咱們本身創建「操做」隊列
[aQ addOperation:theOp];
// 這個是真正運行在另一個線程的「方法」
- (void)myTaskMethod:(id)data
{
    // Perform the task.
}
    簡單介紹以後,其實能夠發現這種方法是很是簡單的。不少的時候咱們使用多線程僅僅是爲了防止主線程堵塞,而NSInvocationOperation就是最簡單的多線程編程,故該中方式在iPhone編程中是常常被用到的。
複雜點的作法是,本身寫一個NSOperation的子類,相似於java中的,實現runnable接口,裏面能夠加更多複雜的邏輯,而後將他加到NSOperationQueue中,就ok啦
相關文章
相關標籤/搜索