3

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

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

这是通过使用断言来强制使用我的类的用户的好习惯吗?它有设计层面的缺陷吗?

4

2 回答 2

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;

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

if (!delegate || ![delegate respondsToSelector:@selector(requiredMethod1)])
{
    //Assertion failure
}
于 2012-11-27T15:14:16.123 回答
1

是的,我认为在应用程序中使用协议是一种很好的做法..

协议声明可以由任何类实现的方法。

以下是使用协议好的情况。

  1. 声明其他人应该实现的方法
  2. 在隐藏对象的类的同时声明对象的接口
  3. 捕获不分层相关的类之间的相似性
于 2012-11-27T15:34:29.560 回答