iOS - Alloc对象,直到调用didReceiveMemoryWarning

时间:2013-09-05 15:31:10

标签: ios memory memory-management

我需要这样做:在调用内存警告之前分配对象,然后释放所有对象。但我有一些问题。我怎样才能做到这一点?我需要代码示例,因为问题是:代码。我有一个不使用ARC的课程。该类有一个方法,它分配保存在数组中的N个对象。我需要填充内存,直到调用didReceiveMemoryWarning,因为这是在iOS上“释放”RAM内存的唯一方法。然后,我将释放所有。我认为App Store上iPhone的更清洁的内存应用程序使用这个技巧来“释放”内存。 提前致谢

2 个答案:

答案 0 :(得分:2)

你必须填写遗漏的细节,但这是我以前用过的。归功于我找到它的人/地点。这适用于ARC和非ARC项目。我发现通常在你完全死亡之前会得到2-3个警告。祝好运。晚餐长度是每次分配多少块。如果你想要更细粒度的内存控制改变大小。

-(IBAction)startEatingMemory:(id)sender
{
    if(self.belly == nil){
        self.belly = [NSMutableArray array];
    }
    self.paused = false;
    [self eatMemory];
} 

- (IBAction)pauseEat:(id)sender {
    self.paused = true;
    [[self class]cancelPreviousPerformRequestsWithTarget:self selector:@selector(eatMemory) object:nil];
}

- (IBAction)stopEatingMemory:(id)sender {
    [self pauseEat:self];

    [self.belly removeAllObjects];
    [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(eatMemory) object:nil];

 }


-(void)eatMemory
{
    unsigned long dinnerLength = 1024 * 1024;
    char *dinner = malloc(sizeof(char) * dinnerLength);
    for (int i=0; i < dinnerLength; i++)
    {
        //write to each byte ensure that the memory pages are actually allocated
        dinner[i] = '0';
    }
    NSData *plate = [NSData dataWithBytesNoCopy:dinner length:dinnerLength freeWhenDone:YES];
    [self.belly addObject:plate];


    [self performSelector:@selector(eatMemory) withObject:nil afterDelay:.1];
}



-(void)didReceiveMemoryWarning 
{

    [self pauseEat:self];
    <#Could release all here#>
    [super didReceiveMemoryWarning];
}

答案 1 :(得分:0)

我会编辑/子类不使用ARC的类来使用ARC,或者为它添加一个释放N个对象的方法。