2011-06-23 45 views
0

请看看这段代码:问题在返回值目标-C

-(NSString *) myfun:(NSString *)name paramnoone:(int)a paramnotwo:(int)b { 
    static int numberofcall=0; 
    if(a>b) { 
     return name; 
    } 

    NSString *secondname = [[NSString alloc]init]; 
    secondname = [name StringByAppendingString:@"test"]; 
    numberofcall++; 
    return secondname; 
} 

我有这一个问题,当我的代码是“回归secondname”下一步打算“回归名”上如果声明部分,即时通讯混淆了很多,因为c + +没有这个问题, 请帮我解决它, 感谢您的帮助和抱歉,我的英语不好。

+0

C++和Objective-C都以C作为其祖先,共享相同的逻辑语句。所以我怀疑你遇到了一个你可以用C++解决的问题,但是不能用Objective-C解决。不幸的是,你的问题描述很混乱,我不明白。请尝试解释。 – DarkDust

+1

当你执行'secondname = [name StringByAppendingString:@“test”];''紧跟在'NSString * secondname = [[NSString alloc] init];'后面时,你正在泄漏内存。您正在失去原始参考。至于这个问题,即使'secondname'应该是返回值,它是否返回'name'? –

+0

是否有可能尝试调试优化版本? – Tommy

回答

1

(直到问题被进一步解释我真的不能回答这个问题,但还是有其理由被张贴作为一个答案有价值的相关信息,所以这里去。)

在行:

NSString *secondname = [[NSString alloc]init]; 

您分配一个空字符串。但在非常下一行:

secondname = [name StringByAppendingString:@"test"]; 

您覆盖指针secondname先前分配的空字符串,从而造成内存泄漏。既然你根本就不使用空字符串,删除第一线并开启第二线为:

NSString *secondname = [name StringByAppendingString:@"test"]; 

编辑:根据意见的问题,我想你问的是这个(纠正我,如果我错了):

  • 你是调试的方法。
  • 在用调试器逐步完成该方法时,流程正常进行到该方法。
  • 但在numberofcall++;行后,调试器突然跳到return name;而不是return secondname;行。

如果这就是你正在发生的事情:不幸的是,这是正常的行为。当调试器达到return语句时,标记始终“跳转”到方法中的第一个return语句。但即使看起来并不那样,您的return secondname;声明也会真正执行。

+0

感谢的人,我的问题是,如果“如果(a> b)”没有发生调试器去“返回secondname”之后去“返回名称”如果stat,我该如何解决这个问题,我知道我的程序有内存泄漏,但它不仅是我的问题。 – mahyar

+0

忽略调试器从一个“返回”跳转到另一个,这不是真正发生的事情,它只是UI向您展示的内容。这是调试器UI中的一个错误。 – DarkDust

+0

谢谢,我改变了我的功能,并将它变成两个部分,它是一个非常非常糟糕的错误。 – mahyar