定义委托属性时的id vs class name

时间:2013-03-28 21:24:32

标签: ios objective-c

我正在申请授权的委托模式。

我以前见过的大多数事情都是这样的:

@property (weak) id<Delegate> delegate;

这会使它比说

弱吗?
@property (weak) UIViewController<Delegate> *delegate;

我意识到我要求第一个中的任何指针,而第二个我期待一个打字指针。但我只希望我的委托成为UIViewController或子类。

任何人都可以解释这些差异和利弊吗?

2 个答案:

答案 0 :(得分:3)

  

但我只希望我的委托成为UIViewController或子类。

然后转到第二种方式 - 第一种方式表示它可以是符合<Delegate>协议的任何对象。

答案 1 :(得分:0)

没有真正的利弊。合同是不同的。一个人说“我不关心它是什么类,只要它符合该协议”,另一个说“我想要一个符合协议的UIViewController的子类”。

这里唯一的一点就是Cocoa中“委托”模式的想法通常是为API的客户提供一种创建对象的方法,该对象将自定义一个或多个其他组件的行为。

由于您希望此属性是视图控制器,因此语义不仅仅是委托,因此我不会将其称为委托,而是将xxxViewController称为“xxx”,它是对象与该视图控制器之间的实际功能关系。