2011-05-11 14 views
0

iPhoneアプリを作成しています。メモリの問題にぶつかり、インストゥルメントを使用してメモリの問題を追跡し始めました。インストゥルメントを誤って使用しているとか、データを誤って読んでいると思うような奇妙な動作に陥っています。安い場所のメモリが高価な場所メモリ近ところに来ていないにもかかわらず、私はまだクラッシュどのようにiOS Instrumentsの理解

**Expensive Location-** 
World (12 MB) 
Loc (27 MB) 
World (13 MB) 
Loc (28 MB) 
World (14 MB) 
-Crash 

**Cheap Location-** 
World (12 MB) 
Loc (23 MB) 
World (13 MB) 
Loc (24 MB) 
World (14 MB) 
-Crash 

お知らせ:

これらは中と場所の外に移動するときに記録さLiveBytes値です。誰も私を助けてくれますか?

+0

私は混乱しています - この文脈では安い場所や高価な場所は何ですか? – Rup

+0

高価な場所では多くのメモリを使いますが、安い場所ではそれほど使いません。 – TurqMage

+1

メモリ使用量とクラッシュの関係は何ですか?クラッシュは何ですか?あなたはほぼ確実に何かをリリースしています(iOSクラッシュの#1原因です)。 –

答えて

1

私はこれがあなたの問題に関連しているかどうかは分かりませんが、私はそれが助けてくれることを願っています:私は最近アプリケーションのメモリフットプリントを追跡していましたが、deallocメッセージがビューコントローラUINavigatorコントローラーで「戻る」を押した後も、この操作から数十個のライブオブジェクトが残っていました(これは計測器アプリの「割り当て」パネルで確認できます)。これを解決するために、私はいくつかのミックスを使用:次に

#pragma mark - RETAIN DEBUG MAGIC 
// ----------------------------------------------------------------------------- 

- (id)retain 
{ 
    NSLog(@"retain \t%s \tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]); 
    return [super retain]; 
} 
- (void)release 
{ 
    NSLog(@"release \t%s \tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]); 
    [super release]; 
} 
- (id)autorelease 
{ 
    NSLog(@"autorelease \t%s \tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]); 
    return [super autorelease]; 
} 

まず、私は(iOS4 - fast context switchingでSOにここにあります)私のカスタムサブビューの保持カウンターをのNSLogするには、次の3つの方法を追加しました(UIButtonをサブビューとしてロードするなどの)単純なタスクを1つだけ残してビュービルディングブロックのそれぞれを分離し、インストゥルメントアプリに戻ってライブオブジェクト(Xcodeのプロダクト>プロファイルの下)を追跡し、すべてのオブジェクトを無効にしました'NS'、 'C​​F'、 'Malloc'という接頭辞が付いています( 'Allocations'タブの隣にあるiボタンをクリックしてください)。この後、右下ペインの「Call Trees」を選択し、前後にナビゲートしてオブジェクトカウンターが上がった数箇所を見つけるまで、掘削を続けました。

シンボルをダブルクリックすると、プロセッサへのコールに関連する詳細が表示されます。さらに、少しiアイコンをクリックすると、強調表示されたコールのバックトレースがポップアップ表示されます。

バックトレースを見ると、フレームのある人物を表す小さなアイコン(これらのアイコンの横にあるテキストは視覚的な手がかりとして非常に暗い)が表示されます。これらをダブルクリックすると、この呼び出しを担当するコードの行に移動します。終わりに :

注:以下は

は、楽器についての詳細を理解する上であなたの手を与えるかもしれないいくつかのリンクあり私の旅の中で、私がしなければならなかったことは、彼らがdealloc'dになることを確実にするために、彼らの「スーパー」ビューに裾を引きます。すなわち、

[[self view] addSubView:aButton]; 
[aButton release]; 
関連する問題