2

在 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];
}
4

2 回答 2

4

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

于 2009-01-11T07:31:32.203 回答
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.
}
于 2009-01-11T16:28:01.387 回答