objective-c - 如何从 Objective-C 中的另一个类访问@public 实例变量?

标签 objective-c public-fields

我知道可以使用@public 关键字定义公共(public)实例变量。 但是,Objective-C 语法不允许访问其他类的变量。 我应该从@public Ivar 获得哪些功能?或者我如何访问其他类(class)的 Ivars?

最佳答案

Objective-C 作为 C 的超集,绝对允许从类的实现外部访问公共(public)实例变量。现在,您可能听说它不被允许 的原因是极度不鼓励这样做。在大多数情况下,如果您想在实现上下文之外访问实例变量,您应该使用访问器和修改器(属性)。

Objective-C 类实际上可以归结为带有 isa 字段(这就是使它成为对象的原因)的普通 C 结构,其中公共(public)字段是可访问的。因为当我们处理类的实例时,我们正在处理一个指向对象(特殊结构)的指针。因此,我们使用 -> 访问公共(public)字段。

这是一个例子:

@interface SomebodyIsntEncapsulating : NSBadIdea {
  @public
  NSString *badIdea;
  BOOL shouldntDoIt;

  @protected
  NSString *ahThatsBetterThankGod;

  @private
  NSString *sweetThanksNowEvenMySubclassesCantTouchMe;
}

现在,在一些完全不同的上下文中,我们可以:

SomebodyIsntEncapsulating *whatOh = [[SomebodyIsntEncapsulating alloc]
                                       initWithDanger:kDangerLevelEpicBraceYourself];
whatOh->badIdea = [@"I'm a public field. Make sure to retain or copy me!" copy];
NSLog(@"Please! Write some accessors and mutators!: %@", whatOh->badIdea);

希望对你有所帮助!

关于objective-c - 如何从 Objective-C 中的另一个类访问@public 实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2182439/

相关文章:

ios - 添加 subview Controller 并更改其标签

ios - 谷歌登录按钮按下检测 ios

ios - 如何在 ios 中限制特定国家/地区的 google maps API

iphone - 使用加速度计执行倾斜操作

c# - 将 C# 公共(public)字段重构为属性的工具

c++ - c++中隐藏特定函数的一种方法

objective-c - 如何制作通知中心小部件 (iOS 5)