随笔分类 -  03B 多线程

摘要:转:http://www.tuicool.com/articles/NVVnMn (1)GCD实现的同步异步、串行并行。 ——同步sync应用场景:用户登录,利用阻塞 ——串行异步应用场景:下载等耗时间的任务 (2)NSOperation和NSOperationQueue实现的线程管理 (3)单例的 阅读全文
posted @ 2016-03-31 14:56 ygm900 阅读(585) 评论(0) 推荐(0) 编辑
摘要:使用dispatch_semaphore_t 实现dispatch_semaphore_t sema = dispatch_semaphore_create(0); //创建信号量__block ALAssetsGroup *ret = nil;ALAssetsLibraryGroupsEnume... 阅读全文
posted @ 2015-06-04 11:24 ygm900 阅读(3084) 评论(0) 推荐(0) 编辑
摘要:转:http://www.cnblogs.com/chen1987lei/archive/2011/06/07/2074636.htmlASIHTTPRequest是一款极其强劲的HTTP访问开源项目。让简单的API完成复杂的功能,如:异步请求,队列请求,GZIP压缩,缓存,断点续传,进度跟踪,上传... 阅读全文
posted @ 2015-04-22 17:00 ygm900 阅读(396) 评论(0) 推荐(0) 编辑
摘要:转:http://wenku.baidu.com/link?url=qJDMdA-KjlkTlEXKGqH6BJ-SNQn7ix2szY31kWXV8dtN98kJMHt0OxuE4Wz5d46zcCOsVIuTIDmLEmnfKuw2iC9el9Z4kXFKEJIeCZAiyDS 阅读全文
posted @ 2014-08-15 10:46 ygm900 阅读(416) 评论(0) 推荐(0) 编辑
摘要:转:http://blog.csdn.net/springpp1990/article/details/12451913 阅读全文
posted @ 2014-04-28 21:53 ygm900 阅读(456) 评论(0) 推荐(0) 编辑
摘要:GCD中弹窗的正确写法- (void)viewDidLoad{ //…… if (![self isStartLoading]) [self startLoading:nil]; //loading界面放在这可以正常显示,速度比较快 dispatch_a... 阅读全文
posted @ 2014-04-28 15:36 ygm900 阅读(400) 评论(0) 推荐(0) 编辑
摘要:dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他的操作。这个方法很有用,比如你执行三个下载任务,当三个任务都下载完成后你才通知界面说完成的了。下面是一段例子代码:[cpp]dispatch_queue_t queue = dispatch_get_glob... 阅读全文
posted @ 2014-04-28 14:45 ygm900 阅读(10300) 评论(0) 推荐(0) 编辑
摘要:单例(单态)模式单例设计模式确保对于一个给定的类只有一个实例存在,这个实例有一个全局唯一的访问点。它通常采用懒加载的方式在第一次用到实例的时候再去创建它。注意:苹果大量使用了此模式。例如:[NSUserDefaults standardUserDefaults], [UIApplication sharedApplication], [UIScreen mainScreen], [NSFileManager defaultManager],所有的这些方法都返回一个单例对象。你很可能会想为什么这么关心是否一个类有多个实例?毕竟代码和内存都是廉价的,对吗?有一些情况下,只有一个实例显得非常合理。举 阅读全文
posted @ 2014-03-18 11:01 ygm900 阅读(3238) 评论(0) 推荐(0) 编辑
摘要:创建一个单例很多办法。我先列举一个苹果官方文档中的写法。[cpp]view plaincopystaticAccountManager*DefaultManager=nil;+(AccountManager*)defaultManager{if(!DefaultManager)DefaultManager=[[selfallocWithZone:NULL]init];returnDefaultManager;}当然,在iOS4之后有了另外一种写法:[cpp]view plaincopy+(AccountManager*)sharedManager{staticAccountManager*sh 阅读全文
posted @ 2014-03-18 11:00 ygm900 阅读(75515) 评论(1) 推荐(6) 编辑
摘要:block是什么block是一个C level的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似。用于回调函数的地方。两个对象间的通讯。实现轻量级的“代理”。blocks和C语言函数指针的区别如何调用blocks调用block和C语言函数指针的调用一模一样如何在 block 中修改外部变量?????考虑到 block 的目的是为了支持并行编程,对于普通的 local 变量,我们就不能在 block 里面随意修改(原因很简单,block 可以被多个线程并行运行,会有问题的),而且如果你在 block 中修改普通的 local 变量,编译器也会报错。那么该如何修改外部变量呢?有两种办法, 阅读全文
posted @ 2013-12-04 11:25 ygm900 阅读(579) 评论(0) 推荐(0) 编辑
摘要:原文地址:http://anxonli.iteye.com/blog/1097777多核运算 在iOS中concurrency编程的框架就是GCD(Grand Central Dispatch), GCD的使用非常简单。它把任务分派到不同的queue队列来处理。开发者把任务代码装到一个个block里面,操作系统把这些任务代码分派到不同的资源里去处理,一个简单的例子来说,为什么初学者写tableview的时候,滑动列表时总会很卡,因为很多初学者把图片装载放到main thread主线程去执行,例如我们要滑动畅顺的话,iOS最快可以1秒内刷新60次,如何你的一个cell的文字和图片装载超过1/60 阅读全文
posted @ 2013-07-10 15:47 ygm900 阅读(365) 评论(0) 推荐(0) 编辑
摘要:转iOS并发编程指南 阅读全文
posted @ 2013-07-06 10:29 ygm900 阅读(184) 评论(0) 推荐(0) 编辑
摘要:第一步:开启子线程 //开启子线程到网络上获取数据 myFirstThread = [[NSThread alloc]initWithTarget:self selector:@selector(thread1GetData) object:nil]; [myFirstThread setName:@"第一个子线程,用于获取网络数据"]; [myFirstThread start]; 第二步:子线程的方法//获取数据-(void)thread1GetData{ while (!myFirstThread.isCancelled) { // 关键 ... 阅读全文
posted @ 2013-06-23 22:46 ygm900 阅读(8032) 评论(0) 推荐(0) 编辑
摘要:一个典型的结束子线程的方法: 用isFinished 检测子线程是否被完全kill掉-(IBAction)btnBack:(id)sender{ //释放内存 仅仅remove 并不会触发内存的释放 if (!(mySecondThread==nil) && !myFirstThread.isCancelled) { [myFirstThread cancel]; //等子线程结束再跳出循环 int i=0; while (!myFirstThread.isFinished){ ... 阅读全文
posted @ 2013-06-23 22:07 ygm900 阅读(3161) 评论(0) 推荐(0) 编辑
摘要:转:http://www.cocoachina.com/bbs/read.php?tid=87592多线程编程指南原文:Threading Programming Guide链接:http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html#//apple_ref/doc/uid/10000057i-CH1-SW1PDF文档下载:多线程编程指南.pdf(1427 K) 下载次数:10893PS:【翻译缘由---翻译本身也是强 阅读全文
posted @ 2013-06-23 16:23 ygm900 阅读(645) 评论(0) 推荐(0) 编辑
摘要:在上一文中,我们已经讨论过用Objective-C锁几种实现(跳转地址),也用代码实际的演示了如何通过构建一个互斥锁来实现多线程的资源共享及线程安全,今天我们继续讨论锁的一些高级用法。1.NSRecursiveLock递归锁平时我们在代码中使用锁的时候,最容易犯的一个错误就是造成死锁,而容易造成死锁的一种情形就是在递归或循环中,如下代码://主线程中NSLock *theLock = [[NSLock alloc] init];TestObj *obj = [[TestObj alloc] init]; //线程1dispatch_async(dispatch_get_global_queue 阅读全文
posted @ 2013-06-23 16:04 ygm900 阅读(345) 评论(0) 推荐(0) 编辑
摘要:为什么需要使用锁,当然熟悉多线程的你,自然不会对它觉得陌生。那你在代码中是否很好的使用了锁的机制呢?你又知道几种实现锁的方法呢?今天一起来探讨一下Objective-C中几种不同方式实现的锁,在这之前我们先构建一个测试用的类,假想它是我们的一个共享资源,method1与method2是互斥的,代码如下:@implementation TestObj - (void)method1{ NSLog(@"%@",NSStringFromSelector(_cmd));} - (void)method2{ NSLog(@"%@",NSStringFromSele 阅读全文
posted @ 2013-06-23 16:02 ygm900 阅读(268) 评论(0) 推荐(0) 编辑
摘要:http://my.oschina.net/jeans/blog?catalog=191644 阅读全文
posted @ 2013-05-31 23:58 ygm900 阅读(115) 评论(0) 推荐(0) 编辑
摘要:ticketsThreadone = [[NSThread alloc] initWithTarget:self selector:@selector(run1) object:nil];[ticketsThreadone setName:@"Thread-1"];[ticketsThreadone start];ticketsThreadtwo = [[NSThread alloc] initWithTarget:self selector:@selector(run2) object:nil];[ticketsThreadtwo setName:@"Threa 阅读全文
posted @ 2013-05-27 22:46 ygm900 阅读(1307) 评论(0) 推荐(0) 编辑
摘要:参考:http://www.cnblogs.com/linyawen/archive/2012/07/24/2606709.html 阅读全文
posted @ 2013-05-27 18:44 ygm900 阅读(173) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示