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

Eon*_*nil 14 objective-c public-fields

我知道用@public关键字定义公共实例变量是可能的.但是,Objective-C语法不允许访问其他类的变量.我应该从@public Ivar中得到什么功能?或者我如何访问其他类'Ivars?

Jon*_*ing 57

Objective-C作为C的超集,肯定允许从类的实现之外访问公共实例变量.现在,您可能听说不允许的原因是它非常沮丧.在大多数情况下,如果要访问实现上下文之外的实例变量,则应使用访问器和更改器(属性).

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

这是一个例子:

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

  @protected
  NSString *ahThatsBetterThankGod;

  @private
  NSString *sweetThanksNowEvenMySubclassesCantTouchMe;
}
Run Code Online (Sandbox Code Playgroud)

现在,在一些完全不同的背景下,我们可以:

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);
Run Code Online (Sandbox Code Playgroud)

我希望能帮到你!

  • 哈哈,我的早晨.好答案 (11认同)

Vla*_*mir 6

您可以像使用 - >(成员指针)运算符一样访问它,就像您通常访问c结构的成员一样(请注意,您总是有一个指向obj-c中对象的指针):

...
@public
int a;
...

myObject->a = 1;
Run Code Online (Sandbox Code Playgroud)