【发布时间】:2010-09-30 18:08:32
【问题描述】:
在 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];
}
【问题讨论】:
-
顺便说一句,您的第二个示例将失败。您不能在函数内部重新分配指针,因为指针本身是按值复制的。如果你想让你的第二个例子工作,你必须使用 NSString **modifyMe 作为参数...
-
我通常将第二个示例中的模式称为“输出参数”。不知道其他人有没有,但我就是这么称呼的。
标签: objective-c cocoa memory memory-management memory-leaks