关于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表示取得这个地址中的对象,也就是外面那个指针,也就是外面指针指向对象的地址。修改这个地址上面的数据,也就达到了按引用传递的效果。

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

转载于:https://www.cnblogs.com/simpleisgood/p/4894700.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值