2

私の .h ファイルには、次のようにプロパティで定義された NSMutableArray *locationsArray があります

@property (nonatomic, retain) NSMutableArray *locationsArray

私の .m ファイルでは、テーブル ビューを表示していました。これは、ロールアップを試みるまで問題なくロードされ、その時点でアクセス不良でクラッシュしました。これは、locationsArray が保持されていないことが原因でした。

このコード行は、.m の問題を修正しました

locationsArray = [[Locations loadLocations] retain] (#1)

このコード行も同じ問題を修正しました

self.locationsArray = Locations.loadLocations (#2)

明確にする必要がある質問がいくつかあります

  1. alloc initこれは、この値を設定する正しい方法alloc initwithArrayですか?
  2. 私が理解しているJavaの世界から来たのselfはこれです、または少なくとも私はそう思っていました...オブジェクトCの違いは、保持を追加しlocationsArrayないselfと保持されないことです。

明らかに、私はそれを機能させましたが、時間がかかり、その理由についてまだ少し混乱しています. 任意の助けをいただければ幸いです。

4

1 に答える 1

1
  1. はい、インスタンス変数 (locationsArray) を直接設定する場合は、値を保持して保持する必要があります。行ったようにそれを行うか、直接割り当て/初期化することができます。これは、所有権を保持していることも意味します。

  2. selfthis実際、他のオブジェクト指向言語と同等です。しかし、最初の例のように「裸の」ivarを参照することとself.locationsArray、2番目の例のように参照することの間には、Obj-Cに意味的な違いがあります。前者は想像どおりに動作しますが、後者は実際には構文上のショートカットで[self setLocationsArray: ... ]あり、プロパティを としてマークしたため、保持が自動的に行われretainます。

この最後の点は非常に微妙であり、(私の見解では) 予期されていない、または明白な動作ではありません。まだよくわからない場合は、Apple のドキュメントに戻ってください。これを手に入れることは本当に重要です。

于 2010-07-29T15:12:17.417 に答える