質問

私は思い出の管理に問題を抱えていると思います。私のnsarray(arrと呼ばれる)は、ランダムな時間に異なるものに変わりつつあります。理由はわかりません。配列を宣言する.hファイルがあり、次に使用して配列を初期化します

NSString *input = [[NSString alloc] initWithData:myData encoding:NSACIIStringEncoding];
arr = [input componentsSeperatedByString:@"\n"];

そして、私はプログラム全体でそれを使用し、突然異なるものに変わります(たとえば、時にはUitouch、時には)。私はそれにリリースを呼んだことはありません。なぜこれをしているのですか?メモリの問題により、オブジェクトがランダムに変更されるのを防ぐにはどうすればよいですか?

ありがとう!

役に立ちましたか?

解決

保持してみてください arr.

arr = [[input componentsSeperatedByString:@"\n"] retain];

他のヒント

何が起こるかは、一度あなたのnsarrayで占められていた記憶が別のオブジェクトによって占められているということです。これは任意のオブジェクトである可能性があり、画面に触れているため、非常に一般的です。

これは、必要に応じてnsarrayを保持していないことを意味するため、時期尚早にリリースされます。宣言するコードは表示されません arr, 、しかし、arrを宣言する場合

@property (nonatomic,retain) NSArray *arr;

使用して合成します

@synthesize arr;

その後、保持は単に同化することによって処理されます self.arr それ以外の arr:

self.arr = [input componentsSeperatedByString:@"\n"];

Cocoa-feakでは、オブジェクトがアレイを「所有」するようになりました。の中に dealloc このクラスの方法は、そうする必要があります [self.arr release].

他の配列を割り当てる必要があります self.arr, 、に割り当てられたオブジェクト self.arr 以前にリリースされ、新しいものが保持されます。

または、この配列を使用して新しい配列を無視します。

arr = [[NSArray alloc] initWithArray:input];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top