【问题标题】:Delegates in Objective-C [duplicate]Objective-C中的代表[重复]
【发布时间】:2011-08-22 11:31:12
【问题描述】:

可能重复:
How does a delegate work in objective-C?

大家好,

我一直在尝试理解 Objective-C 中委托的概念。我尝试跟进文档,但是我正在寻找一些非常简单的示例来熟悉如何在代表之间发送消息,如果我想创建一个自定义代表,我该如何进一步处理?

希望有人能让我更好地理解这个概念。

【问题讨论】:

    标签: objective-c cocoa-touch cocoa


    【解决方案1】:

    委托的基本概念是将重要的决策或信息委托给其他对象实例。

    在大多数框架中,您使用子类化和覆盖方法来挂钩应用程序流。它有效,但缺点很多,例如:

    • 如果没有完整的新子类,您将无法更改决策者
    • 如果没有多重继承,您只能为一个对象(您自己)做出决定。

    对象可能要调用委托有四个原因,这四个原因中的每一个都使用委托方法名称中的关键字来表示这一点。这只是一个命名约定,但如果你想成为一个好公民,你应该遵循这个模式。

    • 询问是否应该发生一些事情。例如:gestureRecognizer:shouldReceiveTouch:
    • 在不可避免的事情发生之前。例如:applicationWillTerminate:
    • 发生某事后。例如:accelerometer:didAccelerate:
    • 为了检索数据,这更像是一个数据源而不是一个委托,但两者之间的界限是模糊的。该名称不包含已定义的名称,但应包含所请求的命名数据。例如:tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:

    作为一般规则,任何委托方法的第一个参数应该是请求委托的命名对象实例。

    【讨论】:

    • PeyloW,你提供的四个理由,这不会是必须召集代表的唯一原因吧?也许主要原因是我会说。比如,我们不能在去“BackGround”时也调用委托吗?还有什么非常简单的例子可以通过委托来遵循一个快速的 NSLog 方法来获取更新?
    • 对于背景内容,我仍然认为这四个规则适用,如果Foo 可以背景,那么您可能拥有以下一项或多项:shouldFooEnterBackground:、@ 987654336@、fooDidEnterBackground: 和/或tokenForEnteringBackgroundWithFoo:。 Apple 有一个名为 PhotoPicker 的示例应用程序,这是一个很好的起点,它既使用 UIKit 中的委托,又定义/使用它自己的委托,所有这些都在两个小类中:developer.apple.com/library/ios/#samplecode/PhotoPicker
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2015-01-11
    • 2013-01-30
    • 2013-03-27
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多