欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

IOS多線程開發(fā)之NSOperation - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運(yùn)營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏壧峁┍憬莸闹С郑?

您當(dāng)前位置>首頁 » 新聞資訊 » 技術(shù)分享 >

IOS多線程開發(fā)之NSOperation

發(fā)表時間:2020-11-5

發(fā)布人:葵宇科技

瀏覽次數(shù):60

撮要


    示積簡腳了NSOperation,NSInvocationOperation,NSOperationQueue和NSBlockOperation的利用,此中NSOperation是抽矮笨類,而NSInvocationOperation跟NSBlockOperation是Foundation實(shí)現(xiàn)瞪個NSOperation子類,而NSOperationQueue是一個線程躲,可能往瑯春閼鬼加NSOperation東西,管理線程。當(dāng)NSOperation的東聞鯔有加加到NSOperationQueue,而曲接調(diào)用start辦房啾,弄調(diào)用出有蝕口同滄悴用,出涌創(chuàng)建線程,而實(shí)鄰本有當(dāng)邊程上實(shí)行代碼。


NSInvocationOperation



- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    NSInvocationOperation* invoOpration = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(invocationOperation) object:nil];
    
    /** 弄name只要創(chuàng)建烈媛線程才逢恭 */
    invoOpration.name = @"InvocationOperation";
    /** 扇髏線程實(shí)行結(jié)束實(shí)行的代碼塊,弄代碼塊正在止程實(shí)行 */
    invoOpration.completionBlock =nil;
    
    NSLog(@"main thread : %@", [NSThread currentThread]);
    
    /** 同業(yè)動行,出涌創(chuàng)建新線程,所以invocationOperation實(shí)鄰止程里實(shí)行
     *  所以,invocationOperation獲得到的[NSThread currentThread]是止程
     */
    [invoOpration start];
    
    /** 對線程實(shí)行裁撤早縱,只要同滄悴用創(chuàng)建了線程,而后調(diào)用了cancel,
     *  isCancelled插詘來YES,出有然,即便線臣幽驏了isCancelled前來仍為NO
     */
    [invoOpration cancel];
    if (invoOpration.isCancelled)
    {
        NSLog(@"cancel successed !");
    }
    else
    {
        NSLog(@"cancel failed !");
    }
}
- (void) invocationOperation
{
    /** 此處當(dāng)邊晨嗯密為止晨嗯密,果為弄辦房嗲同滄悴用的 */
    NSLog(@"NSInvocationOperation thread : %@", [NSThread currentThread]);
}
砸嫘膠匣有雅為

2014-12-31 21:20:41.619 NSOpration[9851:14017706] main thread : <NSThread: 0x7fbff9d03e20>{number = 1, name = main}
2014-12-31 21:20:41.620 NSOpration[9851:14017706] NSInvocationOperation thread : <NSThread: 0x7fbff9d03e20>{number = 1, name = main}
2014-12-31 21:20:41.620 NSOpration[9851:14017706] cancel failed !



      哪當(dāng)ツ倒膠匣有雅瑯春沔可能收霉晨嗯密近似,所以上腳代履姊出逢孤建線程,辦法invocationOperation實(shí)鄰止程實(shí)行。所覺得了創(chuàng)建線程,必要利用NSOperationQueue老肝理NSOperation東西,圓能實(shí)現(xiàn)晨囹典范的并收,所以單單NSOperation東聞觫出有是能實(shí)現(xiàn)部囹典范并收。

NSOperationQueue


     結(jié)卑上腳的NSOperation可知,必要把NSOperation東西加加到線程躲才放實(shí)現(xiàn)晨囹典范的并收,而NSOperationQueue是管理線程當(dāng)邊程躲,可能扇髏同時實(shí)行的最哪當(dāng)ツ倒線程肥、扇髏線程久停/實(shí)行、扇髏線程蛋ń閉系、扇髏線程的裁撤等。必要寄看一里的是,最幸盈粗NSOperation東翁優(yōu)到NSOperationQueue瑯春沔前粗弄東西的自紡瞪密緊扇髏好,出有椅粗弄東翁優(yōu)到線程逗門春沔以后正在建改,果實(shí)斑程逗門春沔當(dāng)邊程自逢處于蝸背自逢,逆舂建改大概會招種位皓偶普瓜滔的缺里,但是可能抽芽線程躲你當(dāng)邊程自逢,比圓線程是可裁辰爆線晨嗯密等。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSOperationQueue* queue = [[NSOperationQueue alloc] init];
    
    //queue.maxConcurrentOperationCount = 2;
    
    NSInvocationOperation* invoOpration = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(invocationOperation) object:nil];
    /** 出有知為甚么扇髏的name挨印的時辰為null!!!! */
    invoOpration.name = @"first";
    [invoOpration setCompletionBlock:^{
            NSLog(@"[first] i am over.");
        }];
    [queue addOperation:invoOpration];
    
    invoOpration = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(invocationOperation) object:nil];
    [invoOpration setCompletionBlock:^{
        NSLog(@"[second] i am over.");
    }];
    [queue addOperation:invoOpration];
    
    /** NSBlockOperation東西可加加多個block */
    NSBlockOperation* blockOpration1 = [[NSBlockOperation alloc] init];
    [blockOpration1 addExecutionBlock:^{
        NSLog(@"i'm blockOpration11");
        /** 延時。必要 */
        sleep(5);
        }];
    [blockOpration1 addExecutionBlock:^{
         NSLog(@"i'm blockOpration12");
        }];
    [queue addOperation:blockOpration1];
    
    NSBlockOperation* blockOpration2 = [NSBlockOperation blockOperationWithBlock:^{
        }];
    /** 加加憑借,必要blockOpration1實(shí)行結(jié)束才放實(shí)行那個 
     *  那種依婦沒有范圍于同一個NSOperationQueue,可能跨
     *  NSOperationQueue
     */
    [blockOpration2 addDependency:blockOpration1];
    [blockOpration2 addExecutionBlock:^
     {
         NSLog(@"i'm blockOpration2");
     }];
    [queue addOperation:blockOpration2];
    
}
- (void) invocationOperation
{
    sleep(3+arc4random()%10);
    NSLog(@"NSInvocationOperation thread : %@", [NSThread currentThread]);
}

實(shí)行膠匣有雅

2014-12-31 22:41:40.999 NSOpration[10198:14048567] i'm blockOpration12
2014-12-31 22:41:40.999 NSOpration[10198:14048566] i'm blockOpration11
2014-12-31 22:41:46.004 NSOpration[10198:14048565] NSInvocationOperation thread : <NSThread: 0x7fc3f9f20bc0>{number = 2, name = (null)}
2014-12-31 22:41:46.004 NSOpration[10198:14048566] i'm blockOpration2
2014-12-31 22:41:46.005 NSOpration[10198:14048571] [second] i am over.
2014-12-31 22:41:53.000 NSOpration[10198:14048568] NSInvocationOperation thread : <NSThread: 0x7fc3f9f217e0>{number = 3, name = (null)}
2014-12-31 22:41:53.000 NSOpration[10198:14048571] [first] i am over.
       哪當(dāng)ツ倒實(shí)行膠匣有殉梟能知講,加到線程躲當(dāng)邊程會緩速實(shí)行。果為first跟second線程辦法瑯春沔緊尾先做了延時,所以輸出朝分末了,而blockOpration1跟blockOpration2出延時,所以實(shí)行線程辦法會緩速輸出膠匣有雅。果為blockOpration2扇髏了憑借,所以blockOpration2等blockOpration1實(shí)行結(jié)束多少頗姣的block緊實(shí)行結(jié)束弄東聞讎算實(shí)行統(tǒng)酴。所以晨囹典范的實(shí)行膠匣有雅跟估煎腋B的,別的可能收明first跟second的辦房寵出當(dāng)邊程是出有卑的,所所以實(shí)的創(chuàng)建了線程。如出有雅翱磉程躲的最哪當(dāng)ツ倒線程實(shí)行肥設(shè)為2,那么會先道待first跟second實(shí)行結(jié)束,背里當(dāng)邊程才會初步實(shí)行。


后絕


       蓋而行,F(xiàn)oundation實(shí)現(xiàn)瞪個子類NSInvocationOperation跟NSBlockOperation是目本夠用的,出庸凝如出有訝釉兇有念法想法,可能自兇笨于NSOpration構(gòu)建自祭閱類,而悍曦寫main跟isCancelled等辦法。

相關(guān)案例查看更多