0

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

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

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

ありがとう!

4

3 に答える 3

2

何が起こるかというと、メモリは、NSArrayによって占有されると、別のオブジェクトによって占有されます。これはどのオブジェクトでもかまいません。画面に頻繁に触れているため、UITouchは非常に一般的です。

これは、必要なときにNSArrayを保持していないため、時期尚早にリリースされることを意味します。宣言するコードは表示されませんarrが、arrを次のように宣言する場合

@property (nonatomic,retain) NSArray *arr;

を使用して合成します

@synthesize arr;

次に、保持は、 :self.arrの代わりに単に支援することによって処理されます。arr

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

cocoa-speakでは、オブジェクトが配列を「所有」するようになりました。deallocこのクラスのメソッドでは、する必要があり[self.arr release]ます。

他の配列をに割り当てると、以前にself.arr割り当てられたオブジェクトself.arrが解放され、新しい配列が保持されます。

于 2010-08-10T15:26:47.997 に答える
0

または、このアレイを使用して新しいアレイを初期化します。

arr = [[NSArray alloc] initWithArray:input];
于 2010-08-10T15:26:07.170 に答える
0

arrを保持してみてください。

arr = [[input componentsSeperatedByString:@"\n"] retain];
于 2010-08-10T15:21:26.160 に答える