我在我的项目中有一部分,我必须用自定义类填充许多数组和字典。在此过程中,内存使用量开始增加。但最后,当我使用removeAllObjects从各处删除项目时,内存使用率保持在同一级别,而不是减少到初始值。iOS - NSMutableArray removeAllObjects不释放内存(ARC)
我做了一个简单的代码不使课程的意义,而是再现我得到了原来的问题:
页眉:
@interface ViewController : UIViewController
@property (strong, nonatomic) NSMutableArray *imageArray;
@property (strong, nonatomic) NSTimer *timer;
- (IBAction)start:(id)sender;
- (IBAction)stop:(id)sender;
@end
实现:
@implementation ViewController
....
- (IBAction)start:(id)sender
{
[self.loadingIndicator startAnimating];
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(addImages) userInfo:nil repeats:YES];
}
- (IBAction)stop:(id)sender
{
[self.loadingIndicator stopAnimating];
[self.timer invalidate];
[self.imageArray removeAllObjects];
}
- (void)addImages
{
int i = 0;
while (i < 500)
{
UIImage *image = [UIImage imageNamed:@"test.png"];
[self.imageArray addObject:image];
i++;
}
}
...
@end
问题:
当我打电话开始,1分钟后内存使用增加f ROM从3.9 MB到58 MB。这很好,但是当我调用停止时,在调用removelAllObjects时,它仍然保持相同的值,即58 MB。
我在做什么错?我正在使用ARC!
您是否尝试过模拟器中的“触发内存警告”以查看内存是否仅在内存压力时才释放?或者当你通过创建一个新的数组来重置数组时,会发生什么,或者只是将nil赋给self.imageArray – rist 2015-04-03 17:12:21
我现在在模拟器上尝试过了,奇怪的是它在完全移除后,从列表中删除所有对象后,内存使用量减少即使没有触发记忆警告也能达到原始值。所以这个问题为什么这种行为在真实设备上有所不同?顺便说一句,重置数组或设置为零产生相同的行为。 – 2015-04-07 12:20:20