NSMutableArrayに値を挿入する場合、MutableArrayが勝ってに保持してくれるものと思っていましたが、そうではないようです。一番最後の行を置き換える場合は、以下のようにコーディングします。
- (void) setInsertLastArray:(NSString *)value{
[tableOfNSArray removeLastObject];
[tableOfNSArray addObject:[value copy]];
}
と、思いましたが、どうもメモリリークが発生しているようです。何がどうなっているのやら。本来はaddObjectでCopyする必要ないですよね。たしかしに、NSArrayをalloc/initしているメソッドではcopyの必要はないです。でもここでcopyをはずすと落ちちゃうんですが・・・わからない・・・・これをやっても落ちます。
releaseしなければ落ちません。でもおかしいですよね。本来NSMutableArray側でRetainするはずですから。うーん・・・
と、思いましたが、どうもメモリリークが発生しているようです。何がどうなっているのやら。本来はaddObjectでCopyする必要ないですよね。たしかしに、NSArrayをalloc/initしているメソッドではcopyの必要はないです。でもここでcopyをはずすと落ちちゃうんですが・・・わからない・・・・これをやっても落ちます。
releaseしなければ落ちません。でもおかしいですよね。本来NSMutableArray側でRetainするはずですから。うーん・・・
- (void) setInsertLastArray:(NSString *)value{
NSString *string = [[NSString alloc] initWithString:value];
[self.tableOfCalcSign addObject:string];
[string release];
}
生成しているメソッドではreleaseしても問題なし。いったん当該メソッドからはずれると追加できない・・・謎。
もしかしてallocした場所以外で編集しようとしても、面倒は見てくれないのかもしれない。そうすると生成後、保存し、また読み出して編集か???? ほんとかよ。それなら出来そうだけど・・・
ーーーーーーーーーーーーー
原因わかりました!! iPhone Developer Program の Forumにあげたところ、メモリ管理の原則を淡々といってくださる方がいて、なやんだけっか、2つのコードの間に、テープルロードのコードがあり、そこでメモリリークが発生しているためでした。
結局 ヘッダファイルでretainしているようなオブジェクトには、allocしたようなものをいれなくても、その場限りで生成したオブジェクト ([NSStirng stringWithString:....];)を代入すれば、保持していることがようやく理解できました。
ふう、つかれたが、これでメモリ管理に自身がつきました。よかった。
生成しているメソッドではreleaseしても問題なし。いったん当該メソッドからはずれると追加できない・・・謎。
もしかしてallocした場所以外で編集しようとしても、面倒は見てくれないのかもしれない。そうすると生成後、保存し、また読み出して編集か???? ほんとかよ。それなら出来そうだけど・・・
ーーーーーーーーーーーーー
原因わかりました!! iPhone Developer Program の Forumにあげたところ、メモリ管理の原則を淡々といってくださる方がいて、なやんだけっか、2つのコードの間に、テープルロードのコードがあり、そこでメモリリークが発生しているためでした。
結局 ヘッダファイルでretainしているようなオブジェクトには、allocしたようなものをいれなくても、その場限りで生成したオブジェクト ([NSStirng stringWithString:....];)を代入すれば、保持していることがようやく理解できました。
ふう、つかれたが、これでメモリ管理に自身がつきました。よかった。
0 件のコメント:
コメントを投稿