关联对象和objc_msgSend

关联对象,其实就是给某个对象关联其他一些对象,这些对象通过键来设置和存储,并且存储对象值得时候可以设置存储策略,常用在类别中

比如我们给UIButton创建一个类别,不用将button处理的事件分开写了

 
 
 
2.消息传递
OC是C的超集,C语言使用的是静态绑定,在编译期就能决定运行时候调用的函数,而OC在给对象传递消息的时候,是利用动态绑定来决定所要调用的方法,是在运行期才知道该调用的方法,甚至可以在运行期改变方法,这使得OC是一门及其动态的语言
 
 
3.消息转发
这里涉及到一个问题就是,当某个对象接收到未知的消息后会发生什么,一般情况是程序会崩溃,但我们可以处理这个未知的消息,使得程序不会creash
OC在编译期间不会报错,因为在运行期可以动态的给该类增加方法。
 
如果对象接受到未知的消息后,就会执行消息转发
分两个阶段,第一阶段:先征询接收者所属的类是否可以动态的添加方法,以处理这个未知的selector,此步叫做动态方法解析
第二阶段:如果没有,就执行这一步,运行期系统会请求接收者以其他方式来处理,又分为二小步。
          1.看接收者看看有没有其他对象可以处理此消息,如果有,运行期系统就会把消息传递给那个对象,消息转发结束
          2.如果没有,就执行完整的消息转发流程,运行期系统会把与消息有关的所有信息封装在NSInvocation对象中,再给接收者最后一次机会,
 
 
 
 

posted on 2015-05-31 20:16  listener~  阅读(126)  评论(0编辑  收藏  举报

导航