强迫开发人员遵守目标C中的协议是一种好习惯吗?

Kri*_*nan 3 objective-c

我正在开发一组简单的可重用代码.我创建了一个协议来对一组方法进行分组,并在运行时向用户询问数据.

我认为设置代表是强制性的.我可以通过抛出声明原因的断言来强制开发人员在运行时设置委托吗?

这是一个很好的做法,通过使用断言来强制我的类的用户?它有设计级别的缺陷吗?

Jam*_*ter 5

首先是"良好做法"问题:

  • 除非确实需要,否则不要制作方法.
  • 如果不是,请不要使方法可选.

  • 不是一个关键的,更多的意见

    • 提供一种方法,initWithDelegate:如果一个委托需要
    • 我经常遇到数据结构,在我调查之前我不知道有委托模式.通过具体的init方法,我早些时候意识到了这一点.

只需将@required指标添加到协议中,即可在编译时发出警告:

@protocol SuperAwesomeProtocol <NSObject>

@required
-(void) requiredMethod1;
-(void) requiredMethod2;

@optional
-(void) optionalMethod1;
-(void) optionalMethod2;

@end

//and making your delegate specific:
@property (nonatomic, assign) id<SuperAwesomeProtocol> delegate;
Run Code Online (Sandbox Code Playgroud)

您仍然可以通过以下方式导致运行时断言

if (!delegate || ![delegate respondsToSelector:@selector(requiredMethod1)])
{
    //Assertion failure
}
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案.我会说:如果真的需要委托,只需实现`initWithDelegate:`.例如[UIGestureRecognizer](http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIGestureRecognizer_Class/Reference/Reference.html)有一个委托,但除非你在做,否则你真的不需要它先进的东西.如果你正在做高级的东西,那么你可能会习惯*至少*看一下标题/文档:) (2认同)