请看这段代码:
-(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 ++没有这个问题, 请帮我解决一下, 谢谢你的帮助,抱歉我的英语不好。
答案 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;
语句也会被执行。