Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
objective-c库头文件的控制_Objective C_Import_Static Libraries_Header Files - Fatal编程技术网

objective-c库头文件的控制

objective-c库头文件的控制,objective-c,import,static-libraries,header-files,Objective C,Import,Static Libraries,Header Files,我正在为iphone编写一个obj-c假库。我需要为project perpose将库部署到我的客户机,但我不想对我的财产进行任何授权。我想给一个单一的头文件连同图书馆,可以由我的客户使用。但问题是这样的:我的类A扩展了类B,类B扩展了类C。我想将类A(文件A.h)的头提供给客户机,但“A.h”中有类似“import B.h”的代码,所以如果我不公开我的B.h,它将不会在客户机的项目中编译,C类和更深层的基类也是如此。 我不能公开这些类,因为它们会公开我所有的结构和我财产的线索。 请给予帮助,非

我正在为iphone编写一个obj-c假库。我需要为project perpose将库部署到我的客户机,但我不想对我的财产进行任何授权。我想给一个单一的头文件连同图书馆,可以由我的客户使用。但问题是这样的:我的类A扩展了类B,类B扩展了类C。我想将类A(文件A.h)的头提供给客户机,但“A.h”中有类似“import B.h”的代码,所以如果我不公开我的B.h,它将不会在客户机的项目中编译,C类和更深层的基类也是如此。 我不能公开这些类,因为它们会公开我所有的结构和我财产的线索。
请给予帮助,非常感谢。

正如对Caleb答案的评论中所述,类必须能够看到其超类的
@接口

但这里是你能做的。除了指定的初始化器外,
ClassB
的接口几乎可以是空的。然后,您可以将库的所有内部属性和方法放在单独的头文件中的一个类别中。e、 g

// 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

通常情况下,您会为内部类别创建一个实现,但只要这些方法在运行时存在,您实际上就不需要这样做。

您好,Caleb,谢谢您的帮助。但似乎@class关键字不能用于基类,这将在xcode中报告编译错误。谢谢JeremyP,这是个好主意。我正致力于将我的结构改变为这种设计模式。