3

我尝试在我的头文件中导入尽可能少的内容(使用实现文件代替),对于类我们可以使用@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>
4

3 回答 3

5

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

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

于 2013-01-15T11:55:11.603 回答
3

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

于 2013-01-15T11:55:22.860 回答
1

要做的步骤

  1. 制作一个protocol.h 文件声明你的@optional 方法等
  2. 在您的 A 类中导入 protocol.h 并实现这些方法。
  3. 使用 calss A 的 obj 的引用从任何地方调用它的协议方法。
于 2013-01-15T11:58:24.863 回答