2

我无法理解 Objective-C 中私有实例变量的概念:

假设我有一堂课:

@interface Dog : NSObject

和两个声明的选择器

- (void)setSomeString:(NSString *)_someString;
- (NSString *)someString;

在 Dog.m 实现文件中,我声明了一个私有实例变量:

@interface Dog()
{
  NSString *someString;
}

在程序的 main 方法中,我创建了一个新的 dog 对象:

Dog *myDog = [[Dog alloc] init];

为什么可以在 main 方法之外做这样的事情?

myDog.someString = @"Yoda";

我希望 someString 变量是私有的,并且只能由其设置器访问

[myDog setSomeString:@"Yoda"];
4

3 回答 3

4

当您使用点语法时,您实际上是在调用方法setSomeString,区别只是语法,而不是含义:)

查看有关向对象发送消息的Apple 文档

于 2012-07-30T14:58:27.887 回答
0

点符号只是一个缩写,

self.someVariable = newValue
//is the same as 
[self setSomeVariable:newValue];

currentValue = self.someVariable;
//is the same as
currentValue = [self someVariable];
于 2012-07-30T15:01:08.550 回答
0

点语法实际上调用了 setter 方法。要访问 iVar,您可以使用箭头语法->

于 2012-07-30T15:02:32.223 回答