总结一些问题

一.block
1.block是一种匿名函数,也是一种闭包,也是一种nsobject.
2.主要用来做并发任务,遍历,回调,现在越来越用作回调取代以前得代理这种回调方式,
3.主要是代码更明确,在要回调的后面加上block,就可以在代码块中处理执行结果.另一个就是可以访问局部变量.
4.block为什么用copy,block默认在栈中,随时销毁,copy把他放到堆中,不用retain,是因为retain只是增加一次计数,block还在栈中,并没有转移的堆中.
5.__weak/__unsafe_unretained打破循环引用block中得arc下,__block在mrc下避免循环引用.
二.gcd
1.gcd是苹果公司开发的ios4及以上才能使用的多线程管理模型,能够更加容易利用设备上得多核心,不用直接跟线程打交道,只是需要向队列中添加代码块.gcd主要部件是一个fifo队列和一个线程池.gcd决定代码块在哪个线程上执行,还根据可用的系统资源对这些线程进行管理.
这是
2.一般用法是添加耗时的代码块到全局并发队列,处理完之后更新ui线程,避免ui阻塞,主动创建并发队列和串行队列.
3. dispatch_once在创建单例的时候保证程序的生命周期这段代码执行一次.
4. dispatch_after可以代码块作延迟执行. dispatch_apply代码块重复执行.
5. Dispatch Group机制允许我们监听一组任务是否完成
6.gcd是基于c的底层api,效率高,代码更简洁.
三. operation queue
1.operation queue被认为是对gcd的封装,是obcject的类,具有更高一层的抽象,我们要尽量使用更高抽象的api,操作队列是并发线程的首选工具.
2.自定义NSOperation,实现响应的方法,直接初始化队列里面添加addOperationWithBlock.NSOperation的子类NSInvocationOperation来创建操作,用NSOperation的子类NSBlockOperation来创建操作. 
3. 可以建立操作直接的依赖,保证执行的顺序,设置并发操作数量,支持kvo监测操作的执行,结束,暂停,取消,他也是fifo的队列,轻松的管理操作
四.Run loop?
1.Run loop是一种事件处理循环,是线程的基础架构部分,用例不停得监听和处理输入事件并将其分配到对应的目标上进行处理,主线程的runloop是默认启动的,其他线程根据需要手动配置和启动.
2.Run loop同时也负责autorelease pool的创建和释放,每当一个运行循环结束的时候,它都会释放一次autorelease pool,同时pool中的所有自动释放类型变量都会被释放掉。
3.我们在以下情况下使用,使用端口或自定义输入源来和其他线程通信,使用线程的定时器,线程需要周期性得工作,每次运行run loop都会指定其运行在哪个模式下。只有相应的源会被监视才允许接收他们传递的消息.
4.Run loop是绑定到某一个线程中得,mainrunloop是与主线程有关,他负责处理定时器,ui事件以及内核相关事件.
5.run loop可以使你的线程在有工作的时候工作,没有工作的时候休眠,这可以大大节省系统资源,
6.根据run loop的特点,输入事件会一个接一个的被串行处理,那么如果一个事件的处理需要的时间特别长的话,就会导致在这个事件处理完之前,app无法响应别的输入事件。在这种情况下,新开一个线程处理更合适。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值