Chr*_*s C 5 iphone macos cocoa objective-c ios
我想验证此修复程序是否真的有效,并且不会对我的代码产生负面影响:
我已经创建了一个带有MyClass.h公共头的静态库,我的其余代码都是隐藏的.MyClass采用MyProtocol协议,MyProtocol是在MyProtocol.h中定义的.我想隐藏MyProtocol.h,但由于MyClass.h是一个公共头,如果我试图将它隐藏为项目头,它就找不到MyProtocol.h.我的解决方案
MyClass.h:
@interface MyClass : NSObject {
//instance variables
}
// methods
@end
Run Code Online (Sandbox Code Playgroud)
MyClass.m:
#import "MyProtocol.h"
@interface MyClass() <MyProtocol>
@end
@implementation MyClass
// implementation
@end
Run Code Online (Sandbox Code Playgroud)
除了这里,我还没有看到其他类似事情的例子:类别可以同时实现协议吗?,问题/答案最终与原始问题无关.所以我想确保它实际上做了它看起来的样子,并且/或者看看是否有更好的方法来实现我想要做的事情.
您提出的建议是完全合法的,并且是您问题的良好解决方案.
有一个微妙的语义区别可能会混淆你对这个主题的谷歌搜索.通过在示例中使用空括号,您在技术上声明了"类扩展",而不是"类别".细微差别在于编译器要求在类扩展中声明的方法在类的主@implementation块中实现.相比之下,在命名类别中声明的方法是在单独的命名实现块中实现的,通常在单独的.m文件中.