gpt4 book ai didi

iOS - 分配对象直到调用 didReceiveMemoryWarning

转载 作者:行者123 更新时间:2023-11-28 22:27:00 24 4
gpt4 key购买 nike

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

最佳答案

您必须填写缺失的详细信息,但这是我以前使用过的。归功于我找到它的人/地方。这将适用于 ARC 和非 ARC 项目。我发现通常你会在完全死亡之前收到 2-3 次警告。祝你好运。晚餐长度是每次分配多少 block 。如果您想要更细粒度的内存控制,请更改大小。

-(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];
}

关于iOS - 分配对象直到调用 didReceiveMemoryWarning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18640414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com