我经常发现自己在写"实用"类,这些类可以在整个项目中重复使用.
例如,假设我有一个"地址簿"视图.我可能想用我的通讯簿来 Select 谁收到了邮箱,或者谁被添加到会议请求中.
我会开发这个视图控制器,这样邮箱控制器和会议控制器都可以使用它,并带有某种回调机制,让调用者知道用户已完成从通讯簿中 Select 某人,或者他们已取消.
在这种情况下,基本上有四种(合理的)方法;
在AddressBookController上创建"AddressBookDelegate"协议和相应的委托属性.然后使用协议中定义的消息传递结果(类似于UIActionSheetDelegate).
在AddressBookController上创建"非正式的""AddressBookDelegate"协议和相应的委托属性,但委托属性的类型将为"id",并将在运行时使用"respondsToSelector:"判断委托是否实现了我们所需的方法(似乎大多数框架内容都开始这样做).
向AddressBookController传递一个代表委托的id,以及两个SEL,它们指定用户 Select 用户或取消请求时要调用的方法.我看到的好处是;假设一个控制器同时支持发送邮箱和设置会议(我知道在本例中,这似乎是一个糟糕的设计……但可以想象一个更一般的情况,在这种情况下,这对于一个实用程序类来说似乎是完全合理的)——在这种情况下,您可以根据是否添加不同的SEL来传递AddressBookController将用户添加到邮箱,或将用户添加到会议...与iVar相比,这是一个巨大的改进,可以指示控制器的"状态".
通过AddressBookController两个模块;一个在用户从通讯簿中 Select 某人时运行,另一个在用户取消请求时运行.
这些积木对我来说非常有用,而且非常优雅,我发现自己几乎对什么时候不使用它们感到困惑.
我希望StackOverflow社区中比我更有经验的成员能够帮助他们思考这个话题.