关于OC按引用传参的技巧

OC里面经常会有这样的需求,函数内部修改外面穿进来的参数, 比如一些错误处理,OC很多使用的是NSError对象而不是异常处理,外面声明一个NSError空对象,传给一个带有该参数的函数,然后错误信息会被放在这个NSError对象里面。

具体需要怎样去做呢,比如:
void test(MyObject **str) {

 

 

 

    *str = [[MyObject alloc] initWithTag:2];

}

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        MyObject *string1 = [[MyObject alloc] initWithTag:1];

        test(&string1);

    }

    return 0;

}

这里非常重要的一点就是理解&p的含义,&p的真正含义是指针p的地址,而p指的才是指针p里面保存的某个对象的地址,而*p表示的才是指针p指向的某个对象。

按照这样的思路,str存储的是某个指针的地址,这里也就是string1的地址,*str表示取得这个地址中的对象,也就是外面那个指针,也就是外面指针指向对象的地址。修改这个地址上面的数据,也就达到了按引用传递的效果。

还有一点,给对象赋值是修改这块地址的内容,而这块地址的内容和这块地址又不是一个概念了。

posted @ 2015-10-20 14:19  Santiago_1991  阅读(611)  评论(0编辑  收藏  举报