1

複数の配列がありますが、別のメソッドで使用するためにデータを保持していません。

設定方法は次のとおりです(簡略化)

.h

NSArray *array;
@property (nonatomic, copy) NSArray *array;
-(void)someMethod:(NSArray*)someArray;
-(void)heresNewMethod;

.m

-(void)someMethod:(NSArray*)someArray
 {
array = [someArray copy];
 }
-(void)heresNewMethod //gets called by method not shown
 {
  NSLog(@"%@", array);
 }
4

3 に答える 3

7

次の 2 つのいずれかが発生しました。

  • オブジェクトにsomeMethod:メッセージを送信して渡しましたnil(おそらく意味なし)。へのメッセージは をnil返すnilので、メッセージnilの結果としてインスタンス変数に代入します。以前に配列へのポインターを隠していたとしても、このメッセージへの応答でそれを置き換えました。copyarraynilsomeMethod:
  • someMethod:オブジェクトにメッセージを送信していません。インスタンス変数は に初期化されてnilおり、インスタンス変数に別のものを入れたことがないため、arrayまだ が含まれていますnil

最初の理論をテストするために、コードに NSLog ステートメントを追加します。真実はどちらか一方なので、最初の理論を確認すると 2 番目の理論が反証され、その逆も成り立ちます。

于 2010-06-19T02:48:07.570 に答える
0

唯一の答えは、あなたが提供したコードはあなたが使用しているコードではなく、その違いは重要だということです. つまり、使用しないプロパティを宣言し、アクセサーを適切に定義しているかどうか、または配列がプロパティをシャドウしているローカルでもあるかどうかが明確ではありません。

実際のコードを投稿してください。

于 2010-06-19T03:15:33.007 に答える
0

arrayを呼び出すたびに何が入っていたかをリークするという事実を除いてsomeMethod:、そのコードは機能するはずです。あなたが見る問題は何ですか?

于 2010-06-18T21:21:36.210 に答える