-2

このコードはiPad4Sで機能しますが、iPad1実行するとクラッシュします。

コードはARCを使用していません(メモリ管理の概念を理解しようとしているので、ARCも使用したくありません)。

Pastebinのヘッダーファイル

Pastebinの実装ファイル

コードはコイントスアプリであり、ユーザーは別のクラスからコインの量を選択でき、この値は実装ファイルからアクセスされます。

私は当初、アレイが問題を引き起こしていると思っていました。メモリ管理の理解から、私はそれらをとして宣言しました@property(nonatomic, retain)。つまり、私は所有権を持っているため、deallocメソッドでそれらを解放する必要があります。オブジェクトのが0に達すると、メソッドdealloc呼び出されます。私は問題を理解するために最善を尽くしました。retainCount

しかし、コードは4で動作するため、存在するかどうかはわかりませ

4

3 に答える 3

3

クラッシュログの提供については、上記の私のコメントを参照してください-ただし

あなたのコードから、あなたはあちこちでretainCountメソッドを使用していることがわかります。しないでください!

retainCountこのように使用しないでください。これは非常に紛らわしい名前のメソッドであり、99%の場合、さらに問題が発生する可能性があります。Appleのドキュメントは、この点に関してかなり明確retainCountです。このようなものには使用しないでください。詳細については、この質問を参照してください(最も評価の高い回答は、実際には現在Apple Frameworksエンジニアとして働いている人によるものです):

-retainCountを使用する場合

于 2012-08-15T11:33:57.010 に答える
1

そのコードには多くの問題があります。

•NSArrayが実行する場合はNSMutableArrayを使用します

•fillArrayを頻繁に呼び出す

•大量の画像を一度にロードします(メモリの問題の原因である可能性があります)

•おそらくインスタンス変数であると思われるグローバル変数がたくさんあります

•これを行います:(直接[NSString stringWithFormat:@" "]使用するだけです)@" "

•まったく使用retainCountします

•一部のオブジェクトがリークする

実際のクラッシュの詳細については、クラッシュログを投稿してください。静的アナライザー(ビルドおよび分析)を使用して、示されたすべての問題を最初に修正します。

于 2012-08-15T15:12:11.107 に答える
0

何か見落としがあった場合は、事前にお詫び申し上げますが、次の機能を使用しているため、メモリが不足しているようです。

    @property(nonatomic, retain)  NSMutableArray *myArray;

「保持された」シンセサイザーであり、これを行うと、アレイにより多くのメモリが割り当てられます。

    [[NSMutableArray alloc] init]

したがって、これを効果的に実行しています。

    [self setMyArray:[[NSMutableArray alloc] init]];

これにより、配列は割り当てによっても、配列変数に割り当てられたときにも保持されます。保持カウントは2です。代わりに、次を使用します。

    [self setMyArray:[NSMutableArray array]];

この場合、[NSMutableArray array]メソッドは、配列が返される前に配列のメモリを自動解放します。セッターは、配列を変数に割り当てるときに、配列に保持を適用します。保持カウントは1です。したがって、deallocで変数を解放すると、配列メモリが解放されます。

保持カウントメソッドは、オブジェクトの自動解放を考慮しないため、実際の保持カウントを正確に反映しない場合があることに注意してください。

于 2012-08-15T12:14:02.573 に答える