マルチスレッドNSThread

4418 ワード

いくつかの基礎知識
//スレッドはプロセスで同時に実行されるコードクリップ/*ネットワーク転送方式の同期です.すべてのタスクは1つのスレッドで完了します.現在のタスクが完了していない限り、次のタスクはブロックされた状態で非同期です.複数のタスクを複数のスレッドに配置して完了します.現在のタスクが完了していなくても、他のタスクの実行には影響しません.//データ転送方式シリアル:1つのスレッドでは、現在のタスクが完了した後、次のタスクのみが実行されます.同時実行:複数のスレッドで異なるタスクを完了します.業務が互いに干渉しないのは普通の時すべて主なスレッドの同期が非同期で、仕事のスレッドのシリアル同時*/*スレッドの種類1、主なスレッドUI MainThreadはふだん書くすべてのコードはすべて主なスレッドの中で行ったので、主なスレッドはシステムが自動的に生成したので、修正することができません2、ワークスレッドworker Threadは、セカンダリスレッドsecondary Threadとも呼ばれ、プライマリスレッドが偽の状態になることを防止し、データの要求とロードレートを向上させる*/
 
-(void)buttonClick:(id)sender

{

    UIButton * button = (UIButton *)sender;

    if (button.tag == 1) {

        NSNumber * num = [NSNumber numberWithInt:100];

        // 

        //<1>

        //    

        //     

        [NSThread detachNewThreadSelector:@selector(threadMain1:) toTarget:self withObject:num];

    }else

    {

        NSNumber * num = [NSNumber numberWithInt:100];

        // 

        //<2>

        NSThread * thread = [[NSThread alloc]initWithTarget:self selector:@selector(threadMain2:) object:num];

        // 

        [thread start];

    }



}

-(void)threadMain1:(NSNumber *)num

{

    NSLog(@" 1 ");

    for (int i = 0 ; i<[num intValue]; i++) {

        NSLog(@" 1 i=%d",i);

        // 

        [NSThread sleepForTimeInterval:0.1];

    }

    //    

    NSLog(@" 1 ");

}

-(void)threadMain2:(NSNumber *)num

{

    NSLog(@" 2 ");

    for (int i = 0 ; i<[num intValue]; i++) {

        NSLog(@"i=%d",i);

        [NSThread sleepForTimeInterval:1];

    }

    NSLog(@" 2 ");

}