我想验证此修复程序确实有效,并且不会对我的代码产生不利影响:

我已经使用MyClass.h公共头创建了一个静态库,其余的代码都被隐藏了。 MyClass采用MyProtocol.h中定义的协议MyProtocol。我想隐藏MyProtocol.h,但是由于MyClass.h是公共头文件,因此如果我尝试将MyProtocol.h保留为项目头文件,则找不到MyProtocol.h。我的解决方案:

MyClass.h:

@interface MyClass : NSObject {
    //instance variables
}
// methods
@end

MyClass.m:
#import "MyProtocol.h"
@interface MyClass() <MyProtocol>
@end

@implementation MyClass
// implementation
@end

除了这里以外,我还没有看到其他类似的示例:Can a category simultaneously implement a protocol?,问题/答案最终与原始问题无关。
因此,我想确保它确实可以像看起来的那样进行操作,和/或查看是否有更好的方法可以实现我想要的操作。

最佳答案

您提出的建议是完全合法的,并且是解决您的问题的很好的解决方案。

有一个微妙的语义区别可能使您在这个主题上的google搜索变得混乱。通过在示例中使用空括号,技术上来说,您已声明“类扩展”,而不是“类别”。细微的区别是,编译器要求在类扩展中声明的方法要在类的主@implementation块中实现。相比之下,在命名类别中声明的方法通常在单独的.m文件中的单独的命名实现块中实现。

08-20 01:42