-1

哪一个是最佳实践-

我有 10 种不同类型的协议,由 10 个不同的类对象 () 遵守,

classA 符合protocolA classB 符合protocolB ...

...您可以将它们视为一对一的关系,而不是 2 个不同类的共享协议。

现在我应该将所有这 10 个协议分组到一个名为 Protocol.h 的头文件中,然后当任何类想要符合他的协议时导入该头文件。就像在A班一样——

#import Protocol.h

或者我应该将每个协议放在包含符合特定协议的对象的类的头文件中,比如- object_name<protocol>。像 X 类一样包含符合协议 A 的 A 类对象。

  @protocol ProtocolaA <NSObject>

    @interface ClassX:
    {
       id <ProtocolA> objectA;
    }

感谢您的回复。

4

3 回答 3

1

对此没有正确或错误的答案。我个人的偏好通常是每个标头一个协议。但是,如果有两个或多个协议在逻辑上组合在一起并且通常会一起导入,则可以将它们放在同一个头文件中。

如果你的协议形成了一个框架的 API,这是将它们放在一起的另一个原因,这样使用框架 API 的类就可以只进行一次导入。

但我建议不要使用通用名称,例如protocol.h,尝试想出一些更能描述协议实际用途的内容,例如 Cocoa 的所有协议和类接口都在一个名为 的标头中逻辑导入(使用嵌套导入)Cocoa.h

在第二部分,我发现将协议和类接口保存在单独的标头中通常更好。

于 2013-07-02T11:01:58.187 回答
1

我不会将所有协议放在一个标头中,因为每个协议只有一个类需要。导入协议标头将为您提供所有协议。

苹果在这些情况下所做的是:

1)在使用协议的类的头文件中包含协议(例如UITableView.hand UITextView.h):

@class ClassX;

@protocol ProtocolX<NSObject>

// Use ClassX here

@end

@interface ClassX

@property (nonatomic) id <ProtocolX> myProtocol;

@end

2)Apple 标头中看到的另一个解决方案是为标头和实现(例如CLLocationManager.hand CLLocationManagerDelegate.h)拥有一个自己的文件。

底线:我更喜欢这两种解决方案,而不是将所有协议放在一个标头中。

于 2013-07-02T11:10:43.537 回答
0

您可以将协议放在包含符合特定协议的对象的类的头文件中,或者将协议添加为新文件。

使用协议

于 2013-07-02T11:06:37.490 回答