2010-01-01 71 views
7

我在我的头文件中定义了一个类级别的int。在.m文件中,我有一个方法,我想要一个int参数,对其进行修改并使调用者反映修改后的值。例如:通过引用传递整数

classLevelInt = 2; 
[self someMethod:classLevelInt]; 

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

在-someMethod:

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

我使用指针(**)

  • 转换一个int

    • 的NSNumber
    • 指针试图到NSNumber里面的方法,这会导致一个新的地址空间

    但从来没有看到方法内的classLevelInt在该方法外反映的值。没有从-someMethod返回新的int值,我怎么能将classLevelInt的值保存在方法之外呢?或者,如果这不是一个好方法,那么更好的方法是什么?

  • 回答

    14

    您可以将指针指向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 
        } 
    } 
    
    +0

    正要回答同样的问题。很好的回答! – 2010-01-01 00:54:28

    +0

    需要指针取消引用。你如何使用诸如(int&)anInt之类的语法? – jjxtra 2012-10-07 20:05:50

    8

    iamamac是正确的,但你还问,如果有一个更好的办法。

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

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