我不确定我的术语,但是:
我在iPhone应用程序中有一个ViewController,需要成为另外两个对象(委托者)的委托.
这可能吗?这不起作用:
@interface my_projectViewController : UIViewController{ ... }
Matt Long.. 24
正确的复数是委托,是的,绝对可以让你的班级成为不同协议的代表.
然而语法是这样的:
@interface my_projectViewController : UIViewController{ ... }
我有一个看起来像这样的:
@interface MyViewController : UIViewController{ }
最好的祝福,
正确的复数是委托,是的,绝对可以让你的班级成为不同协议的代表.
然而语法是这样的:
@interface my_projectViewController : UIViewController{ ... }
我有一个看起来像这样的:
@interface MyViewController : UIViewController{ }
最好的祝福,
稍微迂腐但重要的区别:您在问题中提供的不是作为多个委托者的委托的对象,而是符合多个协议的对象.在大多数情况下,委托将具有与之关联的协议(UIActionSheetDelegate,UITextFieldDelegate),但并非所有委托都具有协议,并且并非所有协议都暗示委托.
在一个非常人为的例子中,你可以有一个委托给另一个符合没有协议的对象的对象:
#import "ObjectB.h" @interface ObjectA : NSObject { ObjectB *delegate; } @end // ... @interface ObjectB : NSObject { } - (void)delegateMethod; @end
在这个例子中,ObjectA的实例期望ObjectB的实例作为它们的"委托",即使ObjectB不是一个真正的协议,而是一个类接口!作为委托的对象的存在更多的是一个心灵的框架,而不是一个严格的协议要求 - 只是大多数(好的,几乎所有)开发人员将采取委托方法并将它们分解为一个协议,以便多个对象可以成为ObjectA实例的委托,而不是要求委托是ObjectB的实例(或子类).这也消除了ObjectA在#import
其头文件意义上"了解"ObjectB的需要.
在一个稍微不那么人为的例子中,一个对象可以在不作为委托的情况下符合协议.将NSCopying协议视为一个很好的例子 - 协议所说的所有实现它的对象都可以使用该copy
方法进行复制.人们不会考虑copy
使用"委托"方法,因为没有对象只是说[delegate copy]
没有对该副本执行某些操作,因此实现NSCopying的对象实际上不是"委托"对象.
最后,请记住:协议并不意味着委托,委托并不总是(但通常会)暗示协议.