在objective-c中为基本类型分配内存的最佳实践是什么?
使用C分配是okey(malloc和free)
unsigned int* val = malloc(sizeof(unsigned int));
free(val);
或者是否有任何obj-c特定分配?
如果函数需要指向int的指针,自己创建和管理指针,或者只是创建常规变量并使用address-of
运算符发送其地址,那么哪个更好?
第一种形式:
NSScanner* scanner = [NSScanner scannerWithString: @"F"];
unsigned int* val = malloc(sizeof(unsigned int));
[scanner scanHexInt: val];
NSLog(@"%d", *val);
free(val);
第二种形式:
NSScanner* scanner = [NSScanner scannerWithString: @"F"];
unsigned int val;
[scanner scanHexInt: &val];
NSLog(@"%d", val);
我自己用第二种形式让自己从无内存的记忆中解脱出来。
答案 0 :(得分:3)
这两种形式都是有效的并且有利有弊,但第一种形式是本例中的额外工作,与第二种形式相比具有负面的性能影响。
在第一种形式中,您将在堆上分配该int,因此malloc的子系统必须执行簿记以确保有可用的分配。您还必须记住以在正确的时间释放分配。
在第二种形式中,分配将在堆栈上进行,这比使用malloc所需的记账要少得多。当您离开此功能时,它也会自动免费。
使用malloc / free的关键时间是你希望变量的范围在当前函数之外。否则,当您离开该功能时,将弹出堆栈,您将丢失数据。