是否可以封装我的类派生自某个超类的事实?类似的东西:
@class NoneOfYourBusiness;
@interface MyClass : NoneOfYourBusiness
@end
编译器不喜欢这样:尝试使用前向类'NoneOfYourBusiness'作为'MyClass'的超类。
答案 0 :(得分:0)
你可以添加一些间接;继承树中的虚拟超类,位于MyClass
和RealSuperclass
之间:
私有标头,HiddenSuperclass.h,带有相应的实现文件
#import <Foundation/Foundation.h>
@interface HiddenSuper : NSObject
- (void)makePancakes;
@end
虚拟类的标题,对应的空实现
#import <Foundation/Foundation.h>
#import "HiddenSuper.h"
@interface DummySuper : HiddenSuper
// Nothing to see here, folks!
@end
然后你的公共课的标题:
#import "DummySuper.h"
@interface PublicSubclass : DummySuper
- (void)fixBreakfast;
@end
实现,由编译隐藏:
#import "PublicSubclass.h"
#import "HiddenSuper.h"
@implementation PublicSubclass
- (void)fixBreakfast
{
[self makePancakes];
}
@end
答案 1 :(得分:0)
两个答案
这个要求毫无意义。客户端代码可以看到超类没有任何意义,因为它应该是空的。
即。这就是他们所能看到的一切
@interface NoneOfYourBusiness : NSObject
@end
@interface MyClass : NoneOfYourBusiness
- (void)publicMethod;
@end
因为您应该将所有私有/内部方法/变量放在私有头/实现文件中。
好的,你真的需要隐藏它出于某种原因,然后隐藏一切
公共标题
@interface MyClass : NSObject
- (void)publicMethod;
@end
私有标头/实施文件
@interface NoneOfYourBusiness : NSObject
@end
@interface MyClassImpl : NoneOfYourBusiness
- (void)publicMethod;
@end
@interface MyClass ()
@property (strong) MyClassImpl *impl;
@end
@implementation
- (id)forwardingTargetForSelector:(SEL)aSelector
{
return self.impl;
}
@end
您甚至可以从MyClass
继承NSProxy
以使其成为真正的代理对象