您的位置:首页 > 移动开发 > IOS开发

iOS多线程——基础

2015-09-02 09:52 260 查看
Thread currentThread]);
        }
    }];
    [operation3 addExecutionBlock:^{
        for (int i = 0; i < 5;
i ++) {

            NSLog(@"块队列2:------------%@",[NSThread currentThread]);
        }
    }];

    

    

    //设置操作依赖:一定要在添加之前进行设置
    [operation3 addDependency:operation1];
    [operation1 addDependency:operation2];

    

    //创建操作队列,把操作添加到队列当中。任务添加的顺序并不能决定执行顺序,执行的顺序取决于依赖。

    //使用Operation的目的就是让开发人员不再关心线程

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [queue addOperation:operation1];
    [queue addOperation:operation2];
    [queue addOperation:operation3];

    
}
-(void)test1
{
    for (int i = 0; i < 5;
i ++) {

        NSLog(@"调用队列1-------%@",[NSThread currentThread]);
    }
}

- (void)test2
{
    for (int i = 0; i < 5;
i ++) {

        NSLog(@"调用队列2-------%@",[NSThread currentThread]);
    }

}



三。操作的监听
1.可以监听一个操作的执行完毕。
2.如下:
    operation3.completionBlock = ^{
        NSLog(@"请继续操作");

    };



//===========================

//NSThread线程的相关操作

使用古老的方式创建线程:pthread_t

使用NSThread创建线程

1.创建线程

  启动线程

2.创建线程后自动启动线程

3.隐式创建线程并启动线程

 

 

 

主线程相关:获得主线程,是否为主线程

 

获取和设置线程的优先级

获得当前线程

获取和设置线程的名字

线程暂停一段时间(线程阻塞)

退出线程(线程死亡,人死不能复生)

 

 

 

线程安全:

多线程的安全隐患:资源共享、

解决方案:

1.@synchronized(互斥锁);

2.原子性和非原子性

OC在定义属性时有nonatomic和atomic两种选择

atomic:原子属性,为setter方法加锁(默认就是atomic)。线程安全,需要消耗大量的资源

nonatomic:非原子属性,不会为setter方法加锁。非线程安全,适合内存小的移动设备

但是,

iOS开发的建议

所有属性都声明为nonatomic

尽量避免多线程抢夺同一块资源

尽量将加锁、资源抢夺的业务逻辑交给服务器端处理,减小移动客户端的压力

线程间的通信:

1.线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信

2.线程间通信的体现

1个线程传递数据给另1个线程

在1个线程中执行完特定任务后,转到另1个线程继续执行任务
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: