出于性能原因:
如果我实现委托协议,我的代码执行得更好,委托将所有未使用的方法实现为无操作存根,像这样?
@protocol FooDelegate <NSObject>
- (void) requiredFooThing;
@end
....
// a class which implements FooDelegate:
- (void) requiredFooThing { /* does nothing */ };
或者只是让协议方法可选并使用反射来查看被调用者是否会响应?
@protocol FooDelegate <NSObject>
@optional
- (void) optionalFooThing;
@end
....
// runtime reflection
if([_delegate respondsToSelector:@selector(optionalFooThing)])
{
[_delegate optionalFooThing];
}
问题是,运行时反射比发送消息更昂贵吗?
答案 0 :(得分:0)
这是一个非常主观的问题,因此根据您的具体用例,我认为测试是有序的。但我确实记得看到一些关于使用KVO的帖子比特定的子类更昂贵,这个问题似乎也是类似的。我认为反射会比特定的代表协议更昂贵。请记住,您可以将委托方法标记为@ optional / @ required。授权也是一种广泛使用的设计模式。再一次,我认为不可能在所有情况下给出具体的答案。