1

プロパティが (非アトミック、保持) である NSMutableArray があり、何らかの理由で解放されています。これを割り当てるときのコードは次のとおりです (tableData は NSMutableArray です)。

tableData = [[[NSMutableArray alloc] init] autorelease];

それを割り当てると、保持カウントは 1 になります。tableData に割り当てると、保持カウントは 2 になります。次に、自動解放を使用すると、runloop の最後に 1 になります (これが必要です)。しかし、これは起こりません。後でそれを参照してメソッドを実行すると、ランダムなオブジェクトが取得され (前回は UITabBarSwappableImageView でした)、認識されないセレクターが送信されたと表示されます。どちらが理にかなっていますか...オブジェクトが解放され、他のオブジェクトがその場所を占めています...しかし、なぜ解放されているのでしょうか? ありがとう。

4

2 に答える 2

3

に割り当ててtableDataも保持カウントが変更されないため、解放されています。

メモリ内のあるスロットから別のスロットにポインタ値をコピーするだけです。それでおしまい。所有権の変更を示すメッセージはディスパッチされません。

実際に setter メソッドを呼び出す必要があります。

[self setTableData:[NSMutableArray array]];

または、ドット構文を好む場合:

self.tableData = [NSMutableArray array];
于 2011-05-14T21:27:11.327 に答える
2

ドット構文を使用しましたか? そうでない場合、合成されたセッターは使用されないため、参照は保持されません。

次のように割り当てる必要があります。

self.tableData = [[[NSMutableArray alloc] init] autorelease];
于 2011-05-14T21:26:15.673 に答える