Pao*_*olo 4 class objective-c private-members
我在我的应用程序中使用的外部框架定义了theClass其内部结构是不透明的.
它的实例变量不能直接访问.
@class TheClassPrivateVars;
@interface TheClass : NSObject
{
@private
TheClassPrivateVars *_theClassPriv;
}
@end
Run Code Online (Sandbox Code Playgroud)
该框架公共接口的并不完整,因为它应该和(在我的我自己的风险),我想读的私有变量之一myClass.
幸运的是,框架提供了完整的源代码,因此我可以访问以下定义TheClassPrivateVars:
@interface TheClassPrivateVars : NSObject
{
int thePrivateInstanceVar; // I want to read this!
//
// other properties here...
//
}
@end
Run Code Online (Sandbox Code Playgroud)
我用上面的代码创建了一个头文件,并将其包含在源文件中,其中必须发生"滥用访问".
theValue = instanceOfTheClass->_theClassPriv->thePrivateInstanceVar;
Run Code Online (Sandbox Code Playgroud)
不幸的_theClassPriv是被宣布为@private.
有没有办法在不修改原始头文件的情况下绕过它?
Mic*_*iak 14
TheClassPrivateVars* private = [instanceOfTheClass valueForKey:@"_theClassPriv"];
Run Code Online (Sandbox Code Playgroud)
编辑:或使用关键路径:
theValue = [[instanceOfTheClass valueForKeyPath:"_theClassPriv.thePrivateProperty"] integerValue];
Run Code Online (Sandbox Code Playgroud)
#import <objc/runtime.h>
TheClassPrivateVars *_data;
object_getInstanceVariable(self, "_theClassPriv", (void**)&_data);
Run Code Online (Sandbox Code Playgroud)
你不能这样做吗?