在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];
}
答案 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.
}