通过引用传递整数

时间:2010-01-01 00:39:14

标签: iphone objective-c memory-management

我的头文件中定义了一个类级别int。在.m文件中,我有一个方法,我想采取一个int参数,修改它并在调用者处反映修改后的值。例如:

classLevelInt = 2;
[self someMethod:classLevelInt];

//Here, I'd like classLevelInt to equal the value assigned to it in the method

In -someMethod:

- (void)someMethod:(int)anInt{
//do some stuff
if(somecondition){
  anInt = 2 + 3; //some operation
}
}

我尝试过使用

  • 的NSNumber
  • 指针指针(**)
  • 将int转换为方法内的NSNumber,从而产生新的地址空间

但永远不会看到classLevelInt方法中的值设置在该方法之外。如果不从-someMethod返回新的int值,我怎样才能在方法之外保留classLevelInt的值?或者,如果这不是一个好方法,那么更好的方法是什么?

2 个答案:

答案 0 :(得分:15)

您可以将指针classLevelInt传递给int*

classLevelInt = 2;
[self someMethod:&classLevelInt];

- (void)someMethod:(int*)anInt {
  //do some stuff
  if(somecondition){
    *anInt = 2 + 3; //some operation
  }
}

第二种方法,您可以直接更改同一班级中的classLevelInt

- (void)someMethod {
  //do some stuff
  if(somecondition){
    classLevelInt = 2 + 3; //some operation
  }
}

答案 1 :(得分:8)

iamamac 是正确的,但您也问过是否有更好的方法。

如果可能,只需直接返回值即可。通过引用通常会引起一些不愉快的“代码味道”。

如果你需要返回多个整数,也许你真的应该创建一个结构或类来封装数据。