创建一个对象作为委托 - 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的主要内容,如果未能解决你的问题,请参考以下文章

使用 ARC 的 Objective-C 代表

AppDelegate 和操作目标(Objective-c 2.0 和 Xcode)

将 Objective-C 协议委托作为参数传递

委托和对象保留objective-c (iOS)

在 Objective C 中为自定义类实现委托时的引用计数

从另一个类调用委托方法