1

この質問は 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")

しかし、それは正しくなく、電話がクラッシュします。私が本当に知る必要があるのは、自分で指定しない場合、これらの変数がどのように自動命名されるかということだけです。ありがとう

また、私は刺すように聞こえるのは嫌いですが、「これをしないでください。安全ではありません」とだけ答えないでください. そうではないことはわかっています。それが、私の製品のほとんどが App Store ではなく Cydia にある理由です =P

4

1 に答える 1

3

バッキングivarは通常、プロパティと同じ名前が付けられます。詳細がなければ、なぜそれがクラッシュしたのかわかりません。実行時に、Objective Cランタイムのproperty_getAttributes(クラスからプロパティを取得するために使用さclass_copyPropertyListていた)を使用して、名前を確認できます。

また、自分自身を厄介に聞こえないように、Cydiaでも、根本的に危険なことをしてはいけません。ユーザーのソフトウェアの信頼性は、サードパーティのアプリストアでも公式のアプリストアと同じくらい重要です。

于 2012-02-03T13:46:05.213 に答える