创建一个对象作为委托 - Objective C
Posted
技术标签:
【中文标题】创建一个对象作为委托 - Objective C【英文标题】:Creating an object to act as a delegate - Objective C 【发布时间】:2010-01-22 14:43:03 【问题描述】:我的问题其实很简单,如何创建一个对象来充当委托,而不是在我的视图中包含委托方法?
例如,我有 x 需要委托方法的功能,并且它们当前设置为使用 self 作为委托。我想将这些方法放在它们自己的对象中,以便在视图结束时可以调用委托方法并执行操作。
最好的方法是什么?
【问题讨论】:
【参考方案1】:例如,NSXMLParser 委托方法 - 它们存在,委托已定义,但我不想在我的视图控制器中将它们称为 self ...我还有什么其他选择?
如果您愿意,可以指定另一个自定义类来处理委托方法。只需创建一个类,将其命名为MyXMLParserDelegate
或类似名称。然后,您所要做的就是告诉您的 NSXMLParser
对象,它应该使用您的类的实例作为其委托。
如果您使用的是 Interface Builder,请将新对象添加到 XIB 文件,将其类设置为 MyXMLParserDelegate
,然后将连接从您的 NSXMLParser
对象的 delegate
选择器拖动到新对象。
如果您以编程方式进行,基本操作如下所示:
MyXMLParserDelegate * myDelegate = [[MyXMLParserDelegate alloc] init];
[someXMLParser setDelegate:myDelegate];
但是请记住,委托不会被保留,因此为了不泄漏内存,您应该在 viewController 类中添加一个 MyXMLParserDelegate
类型的 ivar,然后执行以下操作:
// in your @interface block:
...
MyXMLParserDelegate * myDelegate;
// in your init method:
myDelegate = [[MyXMLParserDelegate alloc] init];
// in your awakeFromNib method (or anywhere else it seems appropriate):
[someXMLParser setDelegate:myDelegate];
// in your dealloc method:
[myDelegate release];
【讨论】:
嗨,谢谢 - 这确实有效,这就是我正在做的,所以很好。【参考方案2】:查看这个答案,我认为它涵盖了您需要的内容:How to use custom delegates in Objective-C
【讨论】:
这不是解释如何创建委托吗?委托方法等已经作为我正在创建的自定义类对象的一部分创建。我只是不想将所需的委托方法放在我的视图控制器中。 例如,NSXMLParser 委托方法 - 它们存在,委托已定义,但我不想在我的视图控制器中将它们称为 self ...我还有什么其他选择?以上是关于创建一个对象作为委托 - Objective C的主要内容,如果未能解决你的问题,请参考以下文章
AppDelegate 和操作目标(Objective-c 2.0 和 Xcode)