単純なアルゴリズムを持つretain/releaseプロジェクトがあります。私は100000個のオブジェクトの変更可能な配列で始まり、5秒間隔ごとに1000個のオブジェクトを最初から削除し、最後に1000個のオブジェクトを追加します。理論的には、私のメモリフットプリントは、遅れても同じままでなければなりませんが、それはある程度上がるまで一貫して上昇します。しかし、 "[array removeAllObjects]"ですべてのオブジェクトを削除して配列を解放しても、一部のメモリだけが戻ってくるわけではありません。私はデバッガなしでリリーススキームで動作しており、アクティビティモニタを使用してメモリ使用量を追跡しています。あなたはあなたが自動解放オブジェクトを作成しているオブジェクトが配列から削除されるとメモリが再生されない
NSURL *url = [NSURL URLWithString:@"http://www.apple.com"];
使用してNSURLを作成
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
array = [[NSMutableArray alloc] init];
for(int i = 0; i<100000; i++){
NSURL *url = [NSURL URLWithString:@"http://www.apple.com"];
[array addObject:url];
}
self.t = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(addAndRemove:) userInfo:nil repeats:YES];
}
-(IBAction)addAndRemove:(id)sender{
[array removeObjectsInRange:NSMakeRange(0, 1000)];
for(int i = 0; i<1000; i++){
NSURL *url = [NSURL URLWithString:@"http://www.apple.com"];
[array addObject:url];
}
}
-(IBAction)clear:(id)sender {
[array removeAllObjects];
[array release];
[t invalidate];
t = nil;
}
私は強い声明を述べるだろう。 AMによるメモリ使用量の監視は、暴走の激しさを克服するために大して役に立たない。 – bbum
私は実際のメモリサイズを見ています。私はすでにリーク機器を使用しており、メモリリークはありません。アロケーションツールを使用しているとき、私は何を探すべきですか? – dpham
私は割り当て装置でテストを行い、正しく動作しました。あなたが言ったように、アクティビティモニターは非常に不正確です。 – dpham