从外部类访问私有变量 - iOS

时间:2012-06-26 14:41:23

标签: objective-c ios

我在类中有一个私有变量,我试图从外部类访问该变量。 有没有办法可以做到这一点?

3 个答案:

答案 0 :(得分:21)

根据定义,私有实例变量是私有的。您无法从外部访问它们。如果您是该类的作者,则应为该变量提供访问器方法。如果你不是,你应该避免访问变量。

然而,有办法规避这种限制。

您可以在第一个类上创建一个类别,并为实例变量添加一个访问器方法。

或者您可以使用键值编码来访问变量。

[object valueForKey:@"variable_name"];

答案 1 :(得分:1)

私有定义意味着它不能被外部类访问。访问私有数据的唯一真正方法是通过接口中提供的访问器方法。

在objective-c中,您可以创建所谓的类别。这些是一组方法,您可以基本上使用它们来扩展类的功能。我对获取在外部类中声明的私有成员(那些没有完整实现的私有成员)的态度并不乐观,但我能够为自己的类编写一个访问私有成员的类别。

#import "OtherClass.h"

@interface OtherClass(RandomAccessor)

-(int) getMyVar;

@end

@implementation OtherClass(RandomAccessor)

-(int) getMyVar
{
    return self->myPrivateVar;
}

@end

我不建议做这样的事情,因为开发人员通常会出于某种原因将数据设为私有。

答案 2 :(得分:0)

您可以创建自己的get / set方法......或者您可以使用Objective-C标准,将变量声明为.h文件中的属性,然后将其合成到.m文件中... Keep记住,如果其他类可以看到变量并访问它,那么它就不再是“私有”变量

testViewController.h

@interface testViewController : UIViewController
{
    NSString *someString;
}

@property (nonatomic, retain) NSString *someString;

@end

testViewController.m

#import testViewController.h

@interface testViewController
@synthesize someString=_someString;
@end
相关问题