【发布时间】:2014-03-16 20:05:00
【问题描述】:
我在应用程序中使用的外部框架定义了theClass,其内部结构是不透明的。
它的实例变量并不意味着可以直接访问。
@class TheClassPrivateVars;
@interface TheClass : NSObject
{
@private
TheClassPrivateVars *_theClassPriv;
}
@end
框架公共接口没有达到应有的完整,并且(风险自负)我想读取myClass 的私有变量之一。
幸运的是,框架提供了完整的源代码,所以我可以访问TheClassPrivateVars的定义:
@interface TheClassPrivateVars : NSObject
{
int thePrivateInstanceVar; // I want to read this!
//
// other properties here...
//
}
@end
我用上面的代码制作了一个头文件,并将它包含在必须发生“滥用访问”的源文件中。
theValue = instanceOfTheClass->_theClassPriv->thePrivateInstanceVar;
很遗憾,_theClassPriv 被声明为 @private。
有什么办法可以绕过它不修改原始头文件?
【问题讨论】:
-
这不是访问器方法的用途吗?还是不能编辑外部框架的代码?也许您可以继承 TheClass,或者将其作为属性添加到您自己的类中?读取 myClass 的属性应该不会太冒险,除非您开始编辑指针指向的地址处的值。
-
没有访问器方法,我不想编辑框架代码并重新编译它。
-
@Paolo:“我不想编辑框架代码并重新编译它”你不需要编辑框架代码。您只需在 your 代码中定义该类的类别。
-
"它的属性不能直接访问。"术语说明:“属性”= getter/setter 方法对。方法不能是私有的或公共的。您所说的是实例变量,而不是属性。
-
@newacct:编辑了术语,谢谢。至于您之前的评论,我似乎无法访问具有用户 Avt 建议的类别的变量。
标签: objective-c class private-members