巧用 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
中实现
程序的复杂度并不会因哪种酷炫的设计模式所减少,能做到的只是对复杂度的切分和控制,即:
- 让一大坨恶心的代码变成几小坨不那么恶心的代码。
- 让恶心的代码只在一个地方恶心。
网友评论