从另一个类访问目标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。
我希望您觉得这篇文章对您有帮助,如果您喜欢,分享或发表评论。
- 在iOS中使用sendAsynchronousRequest:request API处理401状态码
- 在UITableViewCell中的UILabel大小不正确(分配文本后的animation)
- 使用社交框架检索Twitter OAuth令牌(iOS6)
- 在Xcode 4.5中,在哪里设置转换自动化仓库框架的限制
- XCode 8:找不到AFNetworking头文件和Swift pods错误
- 添加SCNBillboardConstraint会使节点消失
- UIViewAnimationOptionAllowUserInteraction不工作
- 我怎么能添加splitview到我的基于视图的应用程序在iPad编码
- 归档时“命令/ usr / sbin / chown失败,退出代码1”