关于NSString非常奇怪的问题

时间:2010-12-21 07:56:30

标签: iphone objective-c nsstring

关于此功能的一个非常奇怪的行为,

void* getNSString(const NSString* str){

str = @"This is new test";
//NSString* str1 = @"so strange test";

return;
}

然后

NSLog(@"%@",getNSString(@"test"));

结果将是

This is new test

如果取消注释

NSString* str1 = @"so strange test";

我的理解是没有返回任何内容,因此应该为NULL,为什么要打印出那些字符串?

然后结果将是

so strange test

2 个答案:

答案 0 :(得分:10)

我不相信没有会被退回。我相信这是不确定的。换句话说,任何东西都可以归还。

在这种情况下,看起来它正在返回发生在给定位置的堆栈上的任何内容。这恰好是你修改或创建的字符串之一,但我可以向你保证这是一个幸运的事故(或者不幸,因为崩溃可能会更好)。

如果您不想返回任何内容,则需要更改:

void* getNSString(const NSString* str){

为:

void getNSString(const NSString* str){

答案 1 :(得分:0)

cocoa / objective c就是这样做的......我之前也遇到过这种类型的问题,

例如:

-(NSObject*) someMethod () 
{  ...

   NSString* result =@"some value"; 
   // because too busy ,I just forgot write the return statement during dev :)
} 

虽然没有像上面代码那样返回,但应用程序也可以返回结果值....

这很有趣......