Objective-C的返回值存在问题

时间:2011-06-23 11:33:26

标签: iphone objective-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;
}

我有一个问题,当我的代码在“返回第二名”时,下一步是在if语句部分“返回名称”,我很困惑,因为c ++没有这个问题, 请帮我解决一下, 谢谢你的帮助,抱歉我的英语不好。

1 个答案:

答案 0 :(得分: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;语句也会被执行。