在objective-c中为原始类型分配内存的最佳实践
Posted
技术标签:
【中文标题】在objective-c中为原始类型分配内存的最佳实践【英文标题】:Best practice to allocate memory for primitive types in objective-c 【发布时间】:2011-11-14 12:56:03 【问题描述】:在 Objective-c 中为原始类型分配内存的最佳做法是什么?
使用 C 分配是好的(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);
我自己用第二种形式将自己从 alloc-free 内存头痛中解脱出来。
【问题讨论】:
【参考方案1】:两种形式都有效并且各有利弊,但在本示例中,第一种形式是额外的工作,并且与第二种形式相比具有负面的性能影响。
在第一种形式中,您将在堆上分配该 int,因此 malloc 的子系统必须执行簿记以确保有可用的分配。您还必须记住在正确的时间释放分配。
在第二种形式中,分配将在堆栈上进行,与 malloc 相比,它需要的簿记要少得多。当您离开此功能时,它也会自动免费为您服务。
使用 malloc/free 的关键时间是如果您希望变量的范围持续到当前函数之外。否则,当您离开函数时,堆栈将被弹出,您将丢失数据。
【讨论】:
最后一段he key time to use malloc/free is if you want the scope of your variable to last outside of the current function
是最好的。以上是关于在objective-c中为原始类型分配内存的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章