0

コレクションプログラミングは初めてなので、この問題に直面しました。どんな助けにも感謝します...

クラスの初期化で NSArray インスタンスを初期化し (既にヘッダー ファイルでそのクラスのプロパティとして定義しているため、そのクラスの実装のどこからでもアクセスできる必要があります)、いくつかのオブジェクトを で割り当てます +(NSArray*) arrayWithObjects: ;。init メソッドのすべては問題ありませんが、...

更新メソッドでその配列を操作したい場合、その配列が DEALLOCATED であるため、アプリがクラッシュします

その配列が割り当て解除されたのはなぜですか? どうすれば防ぐことができますか?

ありがとう 。

4

3 に答える 3

2

ARC を使用していない場合は、initWithObjects で初期化してから保持する必要があります。
ARC を使用している場合は、おそらく弱参照です。プロパティを宣言するときに強参照にします。

于 2012-12-01T20:47:59.887 に答える
1

このように配列を初期化する場合、

objects = [NSArray arrayWithObjects: buttonOne, buttonTwo, 
                                     textField, nil];

従来の方法で、オブジェクトに一度アクセスした後、オブジェクトを自動解放するだけです。むしろretain、オブジェクトを割り当てるか、次のように割り当てて初期化することができます

objects = [NSArray alloc] initWithObjects: buttonOne, buttonTwo, 
                                     textField, nil];
于 2012-12-01T20:41:21.333 に答える
1

alloc代わりにNSArray を使用し、-initWithObjectsメソッドを使用する必要があります。

NSArray* tempArray = [[NSArray alloc] initWithObjects:(id), ..., nil]

于 2012-12-01T20:37:54.350 に答える