【发布时间】:2014-09-03 22:47:04
【问题描述】:
- (void)viewDidLoad
{
[super viewDidLoad];
int Byte = 128 * 1000;
char *po[Byte];
for (int i = 0; i < Byte; i++){
po[i] = (char *)calloc(1024, sizeof(char));
if (po[i] == NULL) {
printf("can not calloc.");
}
}
sleep(1);
for (int j = 0; j < Byte; j++){
free(po[j]);
}
}
模拟器保留内存然后调用 Free() 并按预期释放内存,但在真实设备上,它不是释放内存。它保留了 128MB。如何在真机上释放内存?
【问题讨论】:
-
您在哪个设备上运行它? ios6 或 ios7
-
你怎么知道不是释放内存?
-
永远不要在主线程上调用
sleep。 -
另外请注意,您正在使用
po数组分配 512 KB 的堆栈空间(或在 64 位系统上为 1 MB)。虽然这本身并不算大,但很可能由于堆栈溢出而导致分段错误,尤其是在堆栈空间通常比主线程少的辅助线程上。 -
@milo 是的,我正在使用 ARC。
标签: ios objective-c memory ios-simulator free