在objective-c中为原始类型分配内存的最佳实践

时间:2011-09-10 21:02:28

标签: objective-c memory-management

在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);

我自己用第二种形式让自己从无内存的记忆中解脱出来。

1 个答案:

答案 0 :(得分:3)

这两种形式都是有效的并且有利有弊,但第一种形式是本例中的额外工作,与第二种形式相比具有负面的性能影响。

在第一种形式中,您将在堆上分配该int,因此malloc的子系统必须执行簿记以确保有可用的分配。您还必须记住以在正确的时间释放分配。

在第二种形式中,分配将在堆栈上进行,这比使用malloc所需的记账要少得多。当您离开此功能时,它也会自动免费。

使用malloc / free的关键时间是你希望变量的范围在当前函数之外。否则,当您离开该功能时,将弹出堆栈,您将丢失数据。