当前位置:  开发笔记 > Android > 正文

一个对象可以成为多个委托者的委托吗?

如何解决《一个对象可以成为多个委托者的委托吗?》经验,为你挑选了2个好方法。

我不确定我的术语,但是:

我在iPhone应用程序中有一个ViewController,需要成为另外两个对象(委托者)的委托.

这可能吗?这不起作用:

@interface my_projectViewController : UIViewController   {
  ...
}

Matt Long.. 24

正确的复数是委托,是的,绝对可以让你的班级成为不同协议的代表.

然而语法是这样的:

@interface my_projectViewController : UIViewController  {
  ...
}

我有一个看起来像这样的:

@interface MyViewController : UIViewController {

}

最好的祝福,



1> Matt Long..:

正确的复数是委托,是的,绝对可以让你的班级成为不同协议的代表.

然而语法是这样的:

@interface my_projectViewController : UIViewController  {
  ...
}

我有一个看起来像这样的:

@interface MyViewController : UIViewController {

}

最好的祝福,



2> Tim..:

稍微迂腐但重要的区别:您在问题中提供的不是作为多个委托者的委托的对象,而是符合多个协议的对象.在大多数情况下,委托将具有与之关联的协议(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的对象实际上不是"委托"对象.

最后,请记住:协议并不意味着委托,委托并不总是(但通常会)暗示协议.

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有