导入委托协议的正确方法

时间:2013-01-15 11:51:48

标签: ios import header protocols

我尝试在头文件中尽可能少地导入(使用实现文件),对于类我们可以使用@class,但是协议呢?如果我尝试使用@protocol声明我将在该标头中使用的协议,我会收到警告“无法找到'...'的协议定义”

只是通过导入执行协议声明的标头来处理这个问题的正确方法吗? (所以一个.h文件导入另一个.h)

ListViewController.h的示例:

#import <UIKit/UIKit.h>
#import "JTRevealSidebarV2Delegate.h"  // is this the best way?

@class List;

@protocol JTRevealSidebarV2Delegate;  // this produces a warning.

@interface ListViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, JTRevealSidebarV2Delegate>

3 个答案:

答案 0 :(得分:5)

您需要#import@protocol没有为编译器提供足够的信息来进行类型检查。

(当你声明类型为List的属性时,它需要知道的是你真正的意思是List而不是Lisp。指向任何对象的指针是相同的另一方面,协议包含一个类需要做的东西的列表。它需要知道什么“东西”做任何有用的事情。)

答案 1 :(得分:3)

这是正确的,但是如果你想挑剔,你可以随时创建一个单独的.h文件,只声明你的协议,并让ListViewControllerJTRevealSidebarV2Delegate导入它

答案 2 :(得分:1)

要做的步骤

  1. 制作protocol.h文件,声明你的@optional方法等
  2. 在您的类中导入protocol.h并实现方法。
  3. 使用calss A的obj的引用从任何地方调用其协议方法。