【问题标题】:Best practice to allocate memory for primitive types in objective-c在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 内存头痛中解脱出来。

【问题讨论】:

    标签: objective-c memory-management


    【解决方案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是最好的。
    猜你喜欢
    • 2013-11-08
    • 1970-01-01
    • 2011-08-02
    • 2015-12-24
    • 1970-01-01
    • 2010-11-11
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多