0

クライアント用のアプリを開発していますが、彼のデバイスの1つ(iOS4の第2世代iTouch)でアプリケーションの起動に問題があります。いくつかの割り当て/リークテストを実行しましたが、アプリのコードに問題はないと結論付けました。起動時に割り当ての急増があることに気づき、起動時にライブラリを動的にリンクしているdyldが原因であると結論付けました。xcode4でアプリケーションを事前にバインドするにはどうすればよいですか?

OS Xフォーラムは、あなたがそれを見つけることができると彼らが想定しているという点で、非常に有益ではないように思われました。:/

どんな助けでもいただければ幸いです。ありがとう!

(また、「事前バインド」用の新しいタグを作成できればいいのですが)

4

2 に答える 2

1

dyldによって割り当てられたメモリは、ランタイムの初期段階で行われた最も基本的な割り当てと比較しても、取るに足らないものになるはずです。Objective-Cランタイムおよびその他のシステムフレームワーク/ライブラリは、物事が正しく機能するために必要な一連の内部構造を割り当てます。

たとえば、メインで何も行わず、1回の呼び出しを行っNSLog(@"FooBar");てからスリープする(つまり、UIApplicationをスプールすることさえない)アプリのクイックテストでは、合計52Kの生活に対して373の割り当てが実行されました。

さらに一歩進んで、実際にUIKitを起動すると、次のようになります...

UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));

...アプリが静止状態に達すると、約7800のリビング割り当てで約600Kが表示されます。これはすべて避けられないことです。事前バインドの量がこれを節約することはありません。気にしないことをお勧めします。

Nik Reimanが言ったように、桁違いに多くのメモリが割り当てられている場合は、それがアプリケーションです。結局のところ、ダイナミックリンカによって割り当てられたメモリはまったく重要ではありません。

于 2011-12-09T21:42:15.293 に答える
1

Apple によると、iOS アプリケーションを事前にバインドする必要はありません。大きな割り当てスパイクが発生している場合は、基盤となる OS 自体ではなく、アプリのアーキテクチャが原因であると推測しています。

于 2011-12-08T15:38:47.897 に答える