我知道可以使用@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/