五个案例让你明白GCD死锁:
http://ios.jobbole.com/82622/iOS开发中多线程间关于锁的使用
http://www.cnblogs.com/huayuan320/p/6217738.htmlObjective c中的锁 NSLock,NSConditionLock,NSRecursiveLock等定义
http://blog.csdn.net/xiaofei125145/article/details/52003624NSLock死锁:
unlock 操作必须与lock 操作使用相同的线程,否则会出现未知错误。
同一线程在 lock之后 未unlock 之前 再次 lock 会造成 永久性死锁。MJExtension底层实现原理简单剖析
http://blog.csdn.net/petyou123/article/details/51150401SDWebImage实现原理
http://www.cnblogs.com/cleven/p/5491622.htmlRuntime Method Swizzling开发实例汇总
SEL、Method、IMP的含义及区别:
在运行时,类(Class)维护了一个消息分发列表来解决消息的正确发送。每一个消息列表的入口是一个方法(Method),这个方法映射了一对键值对,其中键是这个方法的名字(SEL),值是指向这个方法实现的函数指针 implementation(IMP)
http://www.jianshu.com/p/f6dad8e1b848响应链
/**
事件的产生和传递:
1、发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中
2、UIApplication 会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常先发送事件给应用程序的主窗口(keywindow)
3、主窗口会在 视图层次结构中(比如window上有个view view上又有一个view) 找到最合适的视图(view)来处理触摸事件,这也是整个事件处理过程的第一步
4、找到合适的视图控件后,就会调用视图控件的touches(touchesBegan等方法)方法来作具体的事件处理
重点:
注意:控制器也可以响应事件
触摸事件的传递是从父控件传递到子控件 (如果两个view1和view2同级,都在当前的viewcontroller上,那先找后添加的子控件view2)
传递:UIApplication - UIWindow - UIViewcontroller - UIViewcontroller上面的view - view再传给view上面的imageView,imageView响应事件,并调用touchBegin方法
响应(响应链):imageView如果没有响应事件,那么顺着响应链找到上一级view,如果view没有响应事件,那么顺着响应链找到上一级(这里即viewController),viewController如果没有响应事件,那么传递给主窗口window,如果还没有响应,就丢弃该事件
总结:传递:有点像父控件传递到子控件 一级一级往下传递
响应:子控件没响应,就丢给父控件响应 一级一级往上响应
UIView不接收触摸事件的三种情况
默认UIImageView的userInteractionEnabled = NO 不允许接收触摸事件
情况1、 userInteractionEnabled = NO
情况2、 hidden = YES
情况3、 alpha = 0
*/
-
KVC