-1

いくつかの項目を含む NSArray があります。NSArray は別のクラスから uitableview にロードされます。詳細ビューから戻って再入力すると (3 回目)、NSArray が空になり、テーブルビューも空になります。何が起こっている?(ガベージコレクタを使っているので漏れではないと思います)

myMatch = [[Match alloc] initWithId:1 OpponentId:13];
4

2 に答える 2

1

これは、次のコンテキストで以前に見たことがあります。

NSArray を次のように定義している可能性があります。

@property (弱い、非アトミック) NSArray *myMatch;

これを次のように変更します。

@property ( strong , nonatomic) NSArray *myMatch;

仮定:

1) iOS にはガベージ コレクターがないため、自動参照カウントを使用していると推測されます。

2) あるビューから別のビューに変更していない (つまり、UITableView がある xib またはシーンを離れていない)

3) 配列は @property として定義されています

弱い参照または強い参照をいつ使用する必要がありますか?

初心者のための良い「経験則」は、プロパティがビュー上のコントロールを参照する場合にのみ弱いものであるべきだということです。他のほとんどの場合、プロパティは強いはずです。

強力なポインターとは、「メモリ内のこのデータへの強力な参照を保持する」ことを意味します。弱いポインターとは、「このデータに誰も興味がない場合、私も興味がない」という意味です。ビューのコントロールは、現在読み込まれているビューに属しているため、通常、弱いポインターのみが必要です。これには強いポインターがあります。

于 2012-05-01T20:29:42.987 に答える
1

私が考えることができる最善の答えは、NSArray を適切に保持することです。私の経験では (以前にこれと同様の問題に遭遇したことがあります)、NSArray を適切にセットアップしていませんでした。ヘッダー ファイルで @property を使用しましたか? @property(非アトミック、保持)NSArray *myArray; 実装部分では、配列に @synthesize を使用できます。これらの手順を実行しないと、初期化に使用したメソッドが終了した後に配列が解放される可能性があります。したがって、保持する必要があります。

于 2012-05-01T20:01:06.273 に答える