阅读 18

iOS开发规范类知识点 博客阅读

巧用 Class Extension 分离接口依赖

*Category 的实现可以依赖主类,但主类一定不依赖 Category,也就是说移除任何一个 Category 的代码不会对主类产生任何影响 .

  • Category 可以直接使用主类已有的私有成员变量,但不应该为实现 Category 而往主类中添加成员变量,考虑在 Category 的实现中使用 objc association 来达到相同效果 .
  • Category 可以有 N 个,Class Extension 也可以有,且它不限于写在.m 中,只要在 @implementation 前定义就可以,我们可以利用这个性质,将 Header 中的声明按功能归类 .
  • Class Extension 还能巧妙的解决一个接口暴露问题 .
iOS 开发中的 Self-Manager 模式
  • 封装视图组件的时候,有时候会定义回调的block,如果事件需要向上级传递多次(“Middle Man”),耦合就太严重了,同时如果block回调的行为基本一致,且处理逻辑可能散落在各处,书写也不太简洁. 这时可以考虑使用 Self-Manager 模式
  • 为解决这个问题,就需要给这个View 放权,让其自己Handle 自己的事件,同时为了不破坏View 的纯洁性,比较好的实践是在Category 中实现

程序的复杂度并不会因哪种酷炫的设计模式所减少,能做到的只是对复杂度的切分和控制,即:

  • 让一大坨恶心的代码变成几小坨不那么恶心的代码。
  • 让恶心的代码只在一个地方恶心。