从方法中返回2个(或更多)变量的最佳方法是什么?
假设我想将2个整数值(例如a = 10& b = 20)返回到(父)方法,并将它们加载到变量myFirst和mySecond。
两种方式都有效,但哪种方式更好?
1)"古典"方式:
-(int *)returnMyValues1
{
int a = 10, b = 20;
static int myResult[2];
myResult[0] = a;
myResult[1] = b;
return myResult;
}
...
int *result;
result = [viewSeatsAndMore returnMyValues];
myFirst = *result;
mySecond = *(result+1);
2)"目标"方式:
-(NSArray *)returnMyValues2
{
int a = 10, b = 20;
return [NSArray arrayWithObjects:[NSNumber numberWithInt:a], [NSNumber numberWithInt:b], nil];
}
...
NSArray *result = [self returnMyValues2];
myFirst = [[result objectAtIndex:0] intValue];
mySecond = [[result objectAtIndex:1] intValue];
关于速度,用100万次迭代测试它们,第一种方式快6秒。
但记忆呢?是"静态int"比NSArray好吗?
内存的保留(由于静态int)不值得(可忽略的)速度增益吗?
有更好的方法吗?
答案 0 :(得分:1)
这实际上取决于您的具体用例。你需要快速的方法吗?如果你不这样做,那就继续使用NSArray
,虽然我建议你使用更简洁的现代语法,因此更容易阅读:
- (NSArray *)returnAnArray {
return @[ @42, @1337 ];
}
如果你确定你只需要返回两个(或一个小的,固定数量的)整数,你也可以返回一个结构:
typedef struct {
int first;
int second;
} TwoInts;
- (TwoInts)returnTwoInts {
return (TwoInts){ 13, 37 };
}
顺便说一下,你上面的“经典”方法是......危险而丑陋。 static
变量在函数调用之间共享(甚至跨不同对象的方法调用)。通常,这与返回与对象相关的内容的方法的预期语义完全不同,因此它会使尝试使用代码的程序员感到困惑。不要那样做。