目标C – 隐藏iVar

这是我的问题。

假设我有一个名为WebServiceBase.h的类。 我需要添加一个名为NSString * requestData的类的iVar。 但是我不需要将这个iVar添加到头文件中,并且让外部人员可以看到它。 (如果我将其作为类库分发)

另外,我需要能够访问这个requestData的iVar,在从WebServiceBase.h扩展的其他类中。 (这些扩展类是由我写的,而不是来自外部的人)

我尝试在类扩展中声明requestData iVar。 但是这对扩展类是不可见的。

任何解决scheme? 我需要保护我的数据,并将其从外部世界隐藏起来。

您可以通过@protected关键字将您的ivars定义为受保护的,这意味着您的类和所有子类都可以毫无问题地访问它,但编译器不会允许其他类不从您的基类inheritance:

 @interface Foo : NSObject { @protected NSObject *a; } 

它非常简单,并且已经为您提供了Objective-C所能提供的所有安全性。

您可以在@implementation块中有一个伊娃定义块。

有两种方式,你可以select一个你喜欢的。

  1).h file @interface YourClass { } .m file @interface YourClass () @property (nonatomic, retain) NSString *title; @end @implementation YourClass @synthesize title; //your method 2) .h flie @interface YourClass { } .m file @implementation YourClass { NSString *title; } //your method 

声明一个类扩展,在另一个.h文件中定义ivar。 把它叫做myclass-private.h 。 然后在你的子类中的主类中导入这个头。