将C数组传递给目标C方法

时间:2014-05-02 04:37:19

标签: objective-c c arrays

我想用尽可能少的代码创建一个整数数组,并将该数组传递给目标C方法。

我试过以下。 sequence以数组开头并传递给setLights:但是当在方法中查看sequence时(通过断点),它不再是数组。

*编辑:我不想使用NSArray,因为整数的NSArray是如此冗长:

使用NSArray:

NSArray *sequence = [[NSArray alloc] initWithObjects: [NSNumber numberWithInt:0], [NSNumber numberWithInt:1], [NSNumber numberWithInt:2], [NSNumber numberWithInt:3], [NSNumber numberWithInt:4],[NSNumber numberWithInt:5],nil];

使用C数组:

int sequence[6] = {0,1,2,3,4,5};

我做错了什么?

- (IBAction)testLights:(id)sender {
    int sequence[6] = {0,1,2,3,4,5};
    //int *sequence[0][1][2][3][4][5]; //also tried this
    [self setLights:sequence];
}


- (void)setLights:(int *)sequence {

    UIImageView *light=[lgtArray objectAtIndex: sequence[0]];
    light.alpha = 0;
    [UIView animateWithDuration:0.3f
                     animations:^{
                         light.alpha = 1;
                     }completion:nil
     ];


}

enter image description here enter image description here

3 个答案:

答案 0 :(得分:2)

使用此语法传递数组:

- (void)setLights:(int[] )sequence

答案 1 :(得分:1)

你正在遇到一个奇怪的C特征,它通过它的变体传播:[大多]指针和数组的等价。

如果你这样做

int *sequence ; 

然后你可以做

sequence [4] ;

*(sequence + 4)

阵列和点大多可以互换。 C变体中的数组仅仅是数据分配。你的定义

- (void)setLights:(int *)sequence 

不传达信息数组信息。您仍然可以像访问数组一样访问序列。 setLights根本没有关于序列分配给它的元素的内在信息。

这里的问题是你在setLights中对数组的使用需要与你分配数据的方式相匹配。

如果你做了

sequence [100] = 10 ;

它在语法上是正确的,但可能会产生错误。

答案 2 :(得分:1)

只有你想要的才详细说明。请改用文字:

NSArray *sequence = @[@0, @1, @2, @3, @4, @5];

并访问如下值:

UIImageView *light = lgtArray[[sequence[0] intValue]]];