Effetive Objective - C 1.Objective 23.委托与数据源协议进行对象间通信

来源:互联网 发布:c4d r16 mac安装 编辑:程序博客网 时间:2024/05/21 22:37

委托:A要做something 但是自己不想做  于是让B去做   但是怎么帮正B一定可以做something???   这就要求B一定遵从某个协议 而遵从这个协议的对象都可以做something

A

{

property  (assign,..) id<协议>   delegate;delegate就是B

}


协议

{

dosometheing

}


B<协议>

{

fun{

      a.delegate = self

   }

dosomething{

}

}

为什么在A中要用assign:因为B  是拥有A  如果A 又拥有B 了那么会导致循环包含

如果不想向外部公布协议  可以在类扩展中生命协议 

当用到协议中的方法为可选方法时 使用时要进行类型的校验(respondsToSelector)

如果在类其实只需要判断一次responsToSelector 然后将其缓存到对象   这样就不会执行多次判断了


委托也可以用来在两个对象直接传递某些数据



0 0
原创粉丝点击