在objective-c中声明重用协议的位置

Posted

技术标签:

【中文标题】在objective-c中声明重用协议的位置【英文标题】:where to declare protocols for reuse in objective-c 【发布时间】:2012-06-01 02:20:21 【问题描述】:

如果我想重用一个协议来通知主视图控制器何时解除详细视图控制器,例如: UIView notification when modal UIImagePickerController is dismissed?

我会在哪里声明这个协议?将协议保存在单独的文件中是最佳实践吗?谢谢。

【问题讨论】:

【参考方案1】:

通常我(复制 Apple 的方法)在将与该协议的委托进行交互的类的标头上声明协议。 (例如,UIActionSheet 头文件包含 UIActionSheetDelegate 的协议声明。)只要您没有 #import 语句的循环引用,在技术上声明协议的位置并不重要。这通常不会发生,因为与协议交互的类这样做是为了避免需要 #import 现在将实现协议的所有其他类。 (UIActionSheet 在通过协议解除时向您的类发送消息,因此不需要#import 您的任何类。)

如果您有一个协议并且几个不相关的类将与该协议的委托进行交互,那么将协议放在自己的文件中是一个很好的指标,因为该协议并没有真正与一个特定的类相关联。

【讨论】:

【参考方案2】:

我认为您应该在单独的文件中声明 UIImagePickerController 的类别。例如 ImagePickerCtrlCatagory.h 和 ImagePickerCtrlCatagory.m 在 ImagePickerCtrlCatagory.h 中,这样做

    #import <Foundation/Foundation.h>
    @protocol ImagePickerCtrlDelegate;
    @interface UIImagePickerController (DissappearDelegate)
        id <ImagePickerCtrlDelegate> delegate;

        @end

【讨论】:

以上是关于在objective-c中声明重用协议的位置的主要内容,如果未能解决你的问题,请参考以下文章

在 Objective-C 中覆盖 @property 声明

在我的 Swift 应用程序中使用来自 XPC 服务的 Objective-C 协议

Objective-C(10)抽象父类---协议

Objective-C(10)抽象父类---协议

Swift 类的 Objective-c 协议。无法识别的方法

Objective-C关键字和概念