Objective-C 函数 “值传递” 和 “引用传递” 和 C

今天遇到一个有意思的问题: Objective-C中所有的对象都是指针!但是今天做了一个测试,传递一些纯对象和一些包装器类,发现了一些问题,先记着,后面再分析以下原因。

我定义了两个似有的函数:

-(void)modifyValue:(NSNumber *)data{
    *data = [NSNumber numberWithInt:100];
}

-(void)modifyPerson:(Person *)p{
    p.name=@“wwwwwwwww”;
}

Person是我自定义的包含name和age等属性。


     NSNumber *data1 = [NSNumber numberWithInt:20];
    Person *person = [[Person alloc] init];


    person.name=@"test" ;
    [self modifyValue:data1];
    [self modifyPerson:person];


    NSLog(@"name = %@",person.name);
    NSLog(@"number = %@",data1);

我发现NSNuber的值没有发生变化,但是Person的name发生了变化。

如果想要改变NSNumber的值,必须把函数改成:

-(void)modifyValue:(NSNumber **)data{
    *data = [NSNumber numberWithInt:100];
}


[self modifyValue:&data1];

这样NSNumber的值才会发生变化。

你可能感兴趣的:(iOS,C-Language)