从另一个类访问目标C中的私有财产和私有iVar

在目标C中定义类时,属性定义为公共或私有。 公共属性包含在.h文件中,私有属性包含在.m文件中。 我们还可以选择声明一个实例变量,该实例变量也是私有的并且没有属性访问器。

下面的.h文件具有一个名为privateArray的NSArray对象,该对象是一个实例变量,还有一个名为myDictionary的公共属性,它是一个NSDictionary。

在下面的.m文件中,有一个名为myPrivateDictionary的NSDictionary私有属性。

如果我们尝试从另一个类访问私有属性,则该私有属性将不可用,如下所示。

如果我们将MyClass的@interface定义添加到ViewController类中,并包括myPrivateDictionary的属性,我们将能够访问private属性。 从下面的屏幕快照中可以看到,Xcode现在可以解析myPrivateDictionary。

尽管我们可以使用键值观察( KVO )的功能来访问该私有实例变量,但是MyClass中的实例变量privateArray是该类的私有实例。 请记住,如果类的创建者已将accessInstanceVariablesDirectly设置为FALSE,则此方法将不起作用。

让我们运行代码以演示它已成功读取实例变量并对其进行了设置。 正如您从下面看到的那样,它已经实现了该目标。

让我们更新代码,以便实例变量存储在ViewController.m文件的局部变量中。

让我们运行代码以查看输出,正如您从下面看到的那样,它未能更改实例变量的值,当我们通过KVO访问实例变量时,它复制了对象而不是分配了指针。 请记住这一点,在使用KVO尝试为实例变量设置新值时,请始终使用setValue。

我希望您觉得这篇文章对您有帮助,如果您喜欢,分享或发表评论。