赞
踩
46. 阐述 Method Swizzle(黑魔法),什么情况下会使用? |
1). 在没有一个类的实现源码的情况下,想改变其中一个方法的实现,除了继承它重写、和借助类别重名方法暴力抢先之外,还有更加灵活的方法 Method Swizzle。 2). Method Swizzle 指的是改变一个已存在的选择器对应的实现的过程。OC中方法的调用能够在运行时通过改变,通过改变类的调度表中选择器到最终函数间的映射关系。 3). 在OC中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字。利用OC的动态特性,可以实现在运行时偷换selector对应的方法实现。 4). 每个类都有一个方法列表,存放着selector的名字和方法实现的映射关系。IMP有点类似函数指针,指向具体的方法实现。 5). 我们可以利用 method_exchangeImplementations 来交换2个方法中的IMP。 6). 我们可以利用 class_replaceMethod 来修改类。 7). 我们可以利用 method_setImplementation 来直接设置某个方法的IMP。 8). 归根结底,都是偷换了selector的IMP。 |
47. 在手势对象基础类UIGestureRecognizer的常用子类手势类型中哪两个手势发生后,响应只会执行一次? |
UITapGestureRecognize |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。