【问题标题】:Accessing private variables from an external class - iOS从外部类访问私有变量 - iOS
【发布时间】:2012-06-26 14:41:22
【问题描述】:

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

【问题讨论】:

  • 请用代码示例和解释澄清您的问题。
  • 如果你想从外部访问它,为什么要将它声明为私有?我认为这违反了封装的基本 OOP 概念
  • 您可以使用 getter,或者我相信 Objective-c 具有可用于设置和获取私有变量的属性。

标签: objective-c ios


【解决方案1】:

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

但是,有一些方法可以绕过这个限制。

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

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

[object valueForKey:@"variable_name"];

【讨论】:

  • 访问私有实例变量的好方法
【解决方案2】:

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

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

#import "OtherClass.h"

@interface OtherClass(RandomAccessor)

-(int) getMyVar;

@end

@implementation OtherClass(RandomAccessor)

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

@end

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

【讨论】:

  • 不会编译,用CBPeripheral的_isPaired试过
【解决方案3】:

您可以创建自己的 get/set 方法...或者您可以通过将变量声明为 .h 文件中的属性来使用 Objective-C 标准,然后在您的 .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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-05
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    相关资源
    最近更新 更多