7

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

4

3 回答 3

26

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

但是,有一些方法可以规避这种限制。

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

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

[object valueForKey:@"variable_name"];
于 2012-06-26T14:51:00.277 回答
1

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

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

#import "OtherClass.h"

@interface OtherClass(RandomAccessor)

-(int) getMyVar;

@end

@implementation OtherClass(RandomAccessor)

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

@end

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

于 2012-06-26T14:49:47.680 回答
0

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

测试视图控制器.h

@interface testViewController : UIViewController
{
    NSString *someString;
}

@property (nonatomic, retain) NSString *someString;

@end

测试视图控制器.m

#import testViewController.h

@interface testViewController
@synthesize someString=_someString;
@end
于 2012-06-26T14:49:21.590 回答