返回指向函数内分配的内存的指针

时间:2009-01-11 07:15:26

标签: objective-c cocoa memory memory-management memory-leaks

在C中,类似下面的内容将是一场灾难(即内存泄漏),因为你正在返回一个指向内存的指针,你永远无法释放:

NSString* foo()
{
  return [NSString stringWithFormat:@"%i+%i=%i", 2, 2, 2+2];
}

这实际上在Objective-C中是完全正常的,因为返回的指针所指向的内存将被自动释放?即使它没问题,是不是因为任何原因而不满意?有什么理由喜欢C风格,如下所示?

void foo(NSString ** modifyMe)
{
  *modifyMe = [NSString stringWithFormat:@"%i+%i=%i", 2, 2, 2+2];
}

2 个答案:

答案 0 :(得分:4)

Cocoa中的函数遵循与Cocoa中的其他内容相同的内存管理规则。你的第一个例子非常好。

答案 1 :(得分:2)

在Objective-C中不仅没有问题,而且只要你有明确定义的所有权语义,它本身就不是C中的问题。

CFStringRef foo()
{
    return CFStringCreateWithFormat(NULL, CFSTR("%i+%i=%"), 2, 2, 2+2);
}

void bar()
{
    CFStringRef str = foo();
    CFRelease(str);
    // Nothing leaked.
}