繁体   English   中英

对Objective-C库的头文件的控制

[英]Control of header file for objective-c library

我正在为iPhone编写obj-c伪造库。 我需要将库部署到我的客户端以进行项目管理,但是我不希望对我的属性进行任何处理。 我想提供一个可以与我的客户端一起使用的库的头文件。 但是问题是这样的:我的A类扩展了B类,B类扩展了C类。我想将A类的头(文件Ah)提供给客户端,但是“ Ah”中有“ import Bh”这样的代码,所以如果我不会公开我的Bh,它不会在我客户的项目中进行编译,例如C类和更深的基础类。 而且我无法公开这些类,因为它们会公开我的所有结构并导致属性的空洞化。 请帮助,非常感谢。

正如对Caleb的回答的评论所述,一个类必须能够看到其超类的@interface

但是,这就是您可以做的。 除指定的初始化程序外, ClassB的接口几乎可以为空。 然后,您可以将所有内部库属性和方法放在单独的头文件中的类别中。 例如

// ClassA.h ---------------------
#import "ClassB.h"

@interface ClassA : ClassB

// stuff

@end

// ClassB.h --------------------- 

@interface ClassB : NSObject

// Properties and methods on ClassB that really are public (possibly none).

@end

// ClassB+Internal.h ---------------------

#import "ClassB.h"

@interface ClassB(Internal) // "Internal" can be anything you like

@property (copy) NSString* mySecretProperty;

// etc

@end

// ClassB.m ---------------------

@interface ClassB()  // Class extension
// Really secret properties and methods not to be seen outside of this file.
@property (copy) NSString* myReallySecretProperty;

@end

@implementation ClassB

@synthesize mySecretProperty;

@end

通常,您将为Internal类别创建一个实现,但是实际上不需要,只要方法在运行时存在即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM