dongruanlong 2014-03-30
类似于什么是进程什么是线程在这里我就不多浪费时间了(Google一下什么都有)!
废话不多说先上图,我相信大家都是喜欢看图的人,俗话说得好,求图求真相吗?虽然这里只有屌丝一个但是真相还是会有的。。。
码农的EQ有限,所以既没有太多煽情的部分了
在Obj-c中线程的创建与启动
首先说一下OC中有几种多线程的方式
//创建多线程对象一
NSThread *thread=[[NSThread alloc] initWithTarget:self selector:@selector(ChildThread:) object:@"子线程"];
//开始运行多线程
[thread start];
//创建多线程对象二
[NSThreaddetachNewThreadSelector:@selector(ChildThread:) toTarget:selfwithObject:@"子线程"];
//创建多线程对象三
[selfperformSelectorInBackground:@selector(ChildThread:) withObject:@"子线程"];
//创建多线程对象四
NSOperationQueue *threadQueue = [[NSOperationQueue alloc] init];
[threadQueue addOperationWithBlock:^(void){
NSThread *t = [NSThread currentThread];
if (![t isMainThread]) {
for (int i=0; i<100; i++) {
NSLog(@"---子线程---%d",i);
}
}
}];
//创建多线程对象五
//创建一个线程队列
NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
//同时执行的并发数
operationQueue.maxConcurrentOperationCount = 1;
//创建一个线程对象
NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(ChildThread:) object:@"子线程"];
//创建一个线程对象
NSInvocationOperation *operation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(ChildThread2:) object:@"子线程2"];
//设置优先级
operation2.queuePriority = NSOperationQueuePriorityHigh;
[operationQueue addOperation:operation1];
[operationQueue addOperation:operation2];
//创建多线程对象六
dispatch_queue_t queueq=dispatch_queue_create("test", NULL);
dispatch_async(queueq, ^{
for (int i=0; i<100; i++) {
NSLog(@"---子线程1---%d",i);
}
dispatch_sync(dispatch_get_main_queue(), ^{
BOOL isMain = [NSThread isMainThread];
if (isMain) {
NSLog(@"主线程");
}
});
});
先创建一个项目
我这里XCode版本是5.0.2
![移动开发在路上-- IOS移动开发系列 多线程一 [转] 移动开发在路上-- IOS移动开发系列 多线程一 [转]](https://cdn.ancii.com/article/image/v1/1G/LD/CS/SCLGD1Iy3rltc8KrwQDmVgvp94IrhTmvs6vvucl9JFd6B4Td7eYO_kx3fkPGrK9RMOTU20Nr2BvZN4mXhttnTQ.png)
创建一个新项目
![移动开发在路上-- IOS移动开发系列 多线程一 [转] 移动开发在路上-- IOS移动开发系列 多线程一 [转]](https://cdn.ancii.com/article/image/v1/1G/LD/CS/SCLGD1Iy3rltc8KrwQDmVgvp94IrhTmvs6vvucl9JFdtCS9B5smnFVZPkNnWDcgfu191zGhrY1-0QkoZ3IPSEA.png)
选择一个空的application 创建
![移动开发在路上-- IOS移动开发系列 多线程一 [转] 移动开发在路上-- IOS移动开发系列 多线程一 [转]](https://cdn.ancii.com/article/image/v1/1G/LD/CS/SCLGD1Iy3rltc8KrwQDmVgvp94IrhTmvs6vvucl9JFdtCS9B5smnFVZPkNnWDcgfk8cauhjAMQZ0cc7cdgO7AA.png)
下一步
![移动开发在路上-- IOS移动开发系列 多线程一 [转] 移动开发在路上-- IOS移动开发系列 多线程一 [转]](https://cdn.ancii.com/article/image/v1/1G/LD/CS/SCLGD1Iy3rltc8KrwQDmVgvp94IrhTmvs6vvucl9JFdtCS9B5smnFVZPkNnWDcgfw6ti3AYP5xQBdaGjji6utQ.png)
点击 创建
![移动开发在路上-- IOS移动开发系列 多线程一 [转] 移动开发在路上-- IOS移动开发系列 多线程一 [转]](https://cdn.ancii.com/article/image/v1/1G/LD/CS/SCLGD1Iy3rltc8KrwQDmVgvp94IrhTmvs6vvucl9JFdtCS9B5smnFVZPkNnWDcgfX4ENs5v3vwI6vjJmyEjLtQ.png)
到这里我们这个项目就算创建好了。
开始 coding
![移动开发在路上-- IOS移动开发系列 多线程一 [转] 移动开发在路上-- IOS移动开发系列 多线程一 [转]](https://cdn.ancii.com/article/image/v1/1G/LD/CS/SCLGD1Iy3rltc8KrwQDmVgvp94IrhTmvs6vvucl9JFdjtnjEe28LzchcH3wvsgXqt_JV4zICUNincMHQQvL1Jw.png)
选择这个.m文件
![移动开发在路上-- IOS移动开发系列 多线程一 [转] 移动开发在路上-- IOS移动开发系列 多线程一 [转]](https://cdn.ancii.com/article/image/v1/1G/LD/CS/SCLGD1Iy3rltc8KrwQDmVgvp94IrhTmvs6vvucl9JFdo1XBgXLRQLZav8qKT-CZG_4h0ioJZsCUS67PLr_oDIA.png)
又补充了一下子
![移动开发在路上-- IOS移动开发系列 多线程一 [转] 移动开发在路上-- IOS移动开发系列 多线程一 [转]](https://cdn.ancii.com/article/image/v1/1G/LD/CS/SCLGD1Iy3rltc8KrwQDmVgvp94IrhTmvs6vvucl9JFeFw523bgwklhHqsocL8zx6G6tINe5nFHNOjXab0HpnqA.png)
![移动开发在路上-- IOS移动开发系列 多线程一 [转] 移动开发在路上-- IOS移动开发系列 多线程一 [转]](https://cdn.ancii.com/article/image/v1/1G/LD/CS/SCLGD1Iy3rltc8KrwQDmVgvp94IrhTmvs6vvucl9JFeFw523bgwklhHqsocL8zx6ZbihZgsoDc9jER0netuXtQ.png)
到这里先告一段落
持续更新中...
那里有不对的请多提意见,互相学习!
感觉有帮助的话,请帮忙推荐一下,大家的肯定才是对我最大的支持!