【问题标题】:Correct Way to Cast NSArray Value into Pointer将 NSArray 值转换为指针的正确方法
【发布时间】:2012-10-20 05:26:55
【问题描述】:

NSArray 值转换为引用的正确语法是什么,即:

&([_colors objectAtIndex:0])

我正在检索的对象是CGColorRef。尝试将上述内容作为参数发送到方法而不将值存储到单独的值中。参数为 (CGColorRef *)。

【问题讨论】:

  • 如何将 CGColorRef 值放入 NSArray?它们不是基于 NSObject 的,所以你必须包装它们。这意味着您无法按照自己的意愿将其取出。你为什么不想要一个单独的变量?这将使它更易于使用、阅读和调试。
  • @rmaddy 实际上是有可能的。例如。阅读此答案stackoverflow.com/questions/7589384/…
  • @Max - 酷。我学到了一些新东西。谢谢。
  • @maddy CoreFoundation 对象与 Objective-C 对象兼容。是的,这是一个丑陋的 hack,但它确实有效。

标签: iphone ios cocoa-touch nsarray


【解决方案1】:

CGColorRef 本身实际上是一个指针,所以你可以直接将它作为参数发送。

【讨论】:

  • 假设它不是一个 colorRef,你知道我将如何完成它吗?
  • 在这种情况下,使用 CGColorRef,使用指针是我能够获得我想要工作的唯一方法。我不知道为什么......我已经像你说的那样简单地尝试过,因为它是一个指针,但是当我更改数组中的值时,它不会更改我发送指针的属性。
  • 也许你应该使用 UIColor 而不是 CGColor
  • 当数组中的值发生变化时,我让另一个值发生变化的唯一方法(我通过参数发送的那个)是如果我将该属性声明为 CGColorRef* ,然后发送它&color
  • 是的,可能...不过此时我不得不更改太多代码。
【解决方案2】:

看来您调用的方法/函数所做的是“通过引用”返回 CGColorRef 对象。由于[NSArray objectAtIndex:] 的返回值只是expression 而不是变量,所以不能取它的地址。你能做的就是

CGColorRef color;
CallTheFunctionToObtainThe(&color);
[_colors replaceObjectAtIndex:0 withObject:color]

当然,要做到这一点,_colors 必须是 NSMutableArray 的一个实例。

【讨论】:

    猜你喜欢
    • 2015-02-25
    • 2012-01-24
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多