Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我创建了一个要求类客户端实现方法的协议。在客户端类中,我还需要执行此方法中定义的相同操作,不仅是在委托调用它时。我认为复制粘贴代码不是一个好主意,但我也不知道直接在客户端类中调用此方法是否是一种好习惯。我在想也许委托方法应该只由委托调用。
我是否应该创建在委托方法中调用的第三种方法以及何时需要它?或者,我可以直接调用委托方法吗?
使用blocks而不是delegates解决您的问题。块与委托做同样的工作,只是它更干净,需要更少的管道工作(想想你必须在类和它们的委托之间穿梭的所有那些实例变量/属性..在块中,所有这些信息都封装在块中),并且与 iOS/objective-c 社区的发展方向一致(您会发现许多高调的库正在演变以用块代替委托和其他东西)。
blocks
delegates
如果你不熟悉块或者你觉得它古怪的语法很烦人,这里是一个用户友好的指南。
这里还有一个很好的答案,它将delegate基于解决方案与block基于解决方案进行了比较,并说明了块解决方案如何比委托解决方案更干净。
delegate
block
没有必要创建第三种方法,但这是一个很好的做法。
假设您需要对某种委托调用进行某些检查,那么您的代码将充满大量 if-then-else 语句。重复但简单的代码比乱码要好。