在方法体内改变形参对象的指向

用C/C++的同学一定会觉得本来就是如此,但作为一个一直以Java为生的人,却会认为这是不可思议的. 当然,依然有N多用Java的同学,可能连这个基础都没搞明白,他们估计以为以下Java代码会改变o的指向,从而让调用方的o对象值发生改变.

void test(Object o) {
o = new MyInt();
o.setInt(12);
}
static void main(String[] args) {

MyInt o = new MyInt();
o.setInt(1);
test(o); //会以为test改变了o对象, 其实不然.
}


Objective-C它也是面向对象, 以上类似的代码也一样是无法改变传入的形参对象的指向, 因为它们形参都是原参对象的指针副本, 更改这个指针副本的指向根本不会影响到原有对象的指向.
那么Objective-C因为是C的超集,它继承了C的指针,以及指针的指针等一系列操作访问内存的能力, 所以它可以实现在一个函数将形参对象改变指向并影响了调用方真实对象的指向.

void change(MyObject **);
void change(MyObject **prt) {
[(*prt) release];
(*prt) = [[MyObject alloc] init];
(*prt).type = @"Change";
}

int main(void) {
@autoreleasepool {
MyObject *object = [[MyObject alloc] init];
object.type = @"hello it";
change(&object); //通过传入地址,来实现类似于基本类型(int,long)的地址指向的内容的改写.从而达到改变prt的指向
[object release];
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值