目标C - 隐藏iVars

时间:2012-07-29 07:27:00

标签: iphone objective-c ios ios5

这是我的问题。

假设我有一个名为WebServiceBase.h的类。我需要在该类中添加一个名为NSString * requestData的iVar。但是我不需要将iVar添加到头文件中并使其对外部人员可见。 (如果我将其作为类库分发)

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

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

任何解决方案?我需要保护我的数据并使其隐藏在外部世界之外。

4 个答案:

答案 0 :(得分:3)

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

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

它就像那样简单,并且已经为您提供了从Objective-C获得的所有安全性。

答案 1 :(得分:1)

你可以在@implementation块中有一个ivar定义块。

答案 2 :(得分:0)

有两种方式,您可以选择一种方式。

    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

答案 3 :(得分:0)

声明一个类扩展,在另一个.h文件中定义ivar。称之为myclass-private.h。然后在主类和子类中导入该标题。