多線程之NSInvocationOperation

來源:互聯網
上載者:User

多線程之NSInvocationOperation


多線程編程是防止主線程堵塞,增加運行效率等等的最佳方法。而原始的多線程方法存在很多的毛病,包括線程鎖死等。在Cocoa中,Apple提供了NSOperation這個類,提供了一個優秀的多線程編程方法。

本次介紹NSOperation的子集,簡易方法的NSInvocationOperation:

@implementation MyCustomClass - (void)launchTaskWithData:(id)data{    //建立一個NSInvocationOperation對象,並初始化到方法    //在這裡,selector參數後的值是你想在另外一個線程中啟動並執行方法(函數,Method)    //在這裡,object後的值是想傳遞給前面方法的資料    NSInvocationOperation* theOp = [[NSInvocationOperation alloc] initWithTarget:self                    selector:@selector(myTaskMethod:) object:data];     // 下面將我們建立的操作“Operation”加入到本地程式的共用隊列中(加入後方法就會立刻被執行)    // 更多的時候是由我們自己建立“操作”隊列    [[MyAppDelegate sharedOperationQueue] addOperation:theOp];} // 這個是真正運行在另外一個線程的“方法”- (void)myTaskMethod:(id)data{    // Perform the task.} @end

一個NSOperationQueue 操作隊列,就相當於一個線程管理器,而非一個線程。因為你可以設定這個線程管理器內可以並行啟動並執行的線程數量等等。下面是建立並初始化一個操作隊列:

@interface MyViewController : UIViewController {     NSOperationQueue *operationQueue;    //在標頭檔中聲明該隊列}@end @implementation MyViewController - (id)init{    self = [super init];    if (self) {        operationQueue = [[NSOperationQueue alloc] init]; //初始化操作隊列        [operationQueue setMaxConcurrentOperationCount:1];        //在這裡限定了該隊列只同時運行一個線程        //這個隊列已經可以使用了    }    return self;} - (void)dealloc{    [operationQueue release];    //正如Alan經常說的,我們是程式的好公民,需要釋放記憶體!    [super dealloc];} @end

簡單介紹之後,其實可以發現這種方法是非常簡單的。很多的時候我們使用多線程僅僅是為了防止主線程堵塞,而NSInvocationOperation就是最簡單的多線程編程,在iPhone編程中是經常被用到的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.