没有明确声明的属性ivars会生成什么名称?

时间:2012-02-03 13:29:40

标签: objective-c ios properties hook cydia

这个问题与使用Mobile Substrate挂钩有关,但只要您了解Objective-C,您可能会提供帮助。

我从UIKit那里学到了这门课程。这是它的一部分:

@interface UIStatusBarItem : NSObject {
     int _type;
}
@property(nonatomic, readonly, retain) int type;
@property(nonatomic, readonly, retain) int leftOrder;
@property(nonatomic, readonly, retain) int rightOrder;
@property(nonatomic, readonly, retain) int priority;

...

@end

当然,如果我想将int type设置为例如16,我会这样做:

MSHookIvar<int>(self, "_type") = 16;

从那时起,[self type]将返回16.我知道的很多。

我的问题是我不知道编译器“命名”int的哪个位置存储了int leftOrderint rightOrderint priority的值。我试过了:

MSHookIvar<int>(self, "leftOrder")

但这不正确并且会导致手机崩溃。我真正需要知道的是,如果您没有自己指定这些变量,这些变量是如何自动命名的。感谢

另外,我讨厌听起来像一个刺,但请不要回答“不要这样做,这不安全。”我知道它不是,这就是为什么我的大多数产品都在Cydia而不是App Store = P

1 个答案:

答案 0 :(得分:3)

支持ivars的名称通常与属性相同。没有更多细节,我不知道为什么会崩溃。您可以使用Objective C运行时中的property_getAttributes(使用class_copyPropertyList从类中获取属性)在运行时检查名称是什么。

另外,不要让自己听起来过于刺激,即使在Cydia,你也不应该从根本上做不安全的事情。用户的软件可靠性在第三方应用商店中与在官方应用商店中一样重要。