说,我在isStarted
类&中定义了一个私有变量MyService
。这个班是一个单身人士:
@implementation MyService {
BOOL isStarted;
}
...
@end
我的问题:
没有创建属性&访问者,有一种方法可以在我获得此类[MyService sharedInstance]
的实例后从另一个类访问此私有变量。如果有办法,请你告诉我怎么样?提前谢谢。
(请不要谈论"不建议这样做"等等。我理解。我只是对在objective-c中访问私有字段的可能性感到好奇。 )
答案 0 :(得分:3)
嗨再次=)有一种方法 - 您可以在运行时获取所有类变量,并且搜索需要一个。这仍然很难,不推荐。你为什么不想使用属性?
- (void*)getValueWithName:(const char*)varName forClass:(NSString*)className {
unsigned int varCount;
Class theClass = NSClassFromString(className);
Ivar *vars = class_copyIvarList(theClass, &varCount);
for (int i = 0; i < varCount; i++) {
Ivar var = vars[i];
const char* name = ivar_getName(var);
if (strcmp(name, varName) == 0) {
ptrdiff_t offset = ivar_getOffset(var);
unsigned char* bytes = (unsigned char *)(__bridge void*)self;
free(vars);
return (bytes+offset);
}
}
free(vars);
return NULL;
}
铸造价值:
NSInteger t = *(NSInteger*)[self getValueWithName:"p" forClass:@"ViewController"];
BOOL checkBool = *(BOOL*)[self getValueWithName:"boolean" forClass:@"ViewController"];
NSString *checkString = *((__unsafe_unretained NSString **)([self getValueWithName:"string" forClass:@"ViewController"]));
答案 1 :(得分:0)
我不确定单身是否会使这与众不同,但这是一个类似的问题。
根据这篇文章,你可以。
Accessing private variables from an external class - iOS
这有点旧,但我会试一试。
具体来说,这一行
[object valueForKey:@"variable_name"];