2012-06-26 40 views
4

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

+1

请用代码示例和说明说明您的问题。 –

+0

为什么要声明它是私人的,如果你想访问它外部?我认为这违反了封装的基本OOP概念 – janusbalatbat

+0

您可以使用getter,或者我相信objective-c具有可用于设置和获取私有变量的属性。 –

回答

18

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

但是,有办法规避这种限制。

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

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

[object valueForKey:@"variable_name"];
+0

访问私有实例变量的好方法 –

0

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

testViewController.h

@interface testViewController : UIViewController 
{ 
    NSString *someString; 
} 

@property (nonatomic, retain) NSString *someString; 

@end 

testViewController.m

#import testViewController.h 

@interface testViewController 
@synthesize someString=_someString; 
@end 
1

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

在Objective-C中,您可以创建所谓的类别。这些是您基本可以用来扩展类的功能的一组方法。我对获得在外部类中声明的私有成员(没有完全实现的私有成员)的访问并不积极,但我能够为我自己的类访问私有成员编写一个类。

#import "OtherClass.h" 

@interface OtherClass(RandomAccessor) 

-(int) getMyVar; 

@end 

@implementation OtherClass(RandomAccessor) 

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

@end 

我真的不建议做这样的事情,但是,因为开发人员通常使私人有原因的数据。

+0

不会编译,尝试使用CBPeripheral的_isPaired –