Iphone:NSInvocation更改参数的引用?

时间:2009-08-23 20:37:13

标签: iphone reference memory-address

我正在尝试设置NSinvocation以将图片上传到网站。我这样做:

  1. 设置nsinvocation对象
  2. 将一个UIImage *作为参数添加到nsinvocation对象,以及其他一些参数
  3. 在需要时调用nsinvocation
  4. 调用nsinvocation时调用的函数无法访问UIImage-我得到NSInvalidArgumentException。
  5. 经过一段时间的挖掘,看起来如果我将一个UIImage作为参数添加到我的NSInvocation对象中,然后尝试将其取回...我返回了一个不同的内存地址!这是正常的吗?

    // 首先我有一个有效的UIImage“imgHolder”,其内存地址为“A”......

    NSInvocation * myInvocation = [NSInvocation invocationWithMethodSignature:...

    [myInvocation setArgument:imgHolder atIndex:5];

    // 现在,奇怪的部分......

    UIImage * checkImg;

    [myInvocation getArgument:& checkImg atIndex:12];

    // checkImg的内存地址为“B”!

    如果我尝试使用checkImg,我会得到各种异常,这让我相信它不是一个有效的UIImage。

    任何想法发生了什么? checkImg的内存地址不应该与imgHolder的内存地址相同吗?

1 个答案:

答案 0 :(得分:1)

  

[myInvocation setArgument:imgHolder atIndex:5];

如果imgHolder是UIImage *,你应该传递& imgHolder,而不是imgHolder。