単純なアルゴリズムを持つ保持/解放プロジェクトがあります。私は 100000 オブジェクトの可変配列で開始し、5 秒間隔ごとに最初に 1000 オブジェクトを削除し、最後に 1000 オブジェクトを追加します。理論的には、メモリ フットプリントはわずかな遅延の後も同じままである必要がありますが、一定量に達するまで一貫して増加します。ただし、「[array removeAllObjects]」ですべてのオブジェクトを削除して配列を解放しても、すべてのメモリが回収されるわけではなく、一部だけが回収されます。デバッガーを使用せずにリリース スキームで実行し、アクティビティ モニターを使用してメモリ使用量を追跡しています。
- (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;
}