【问题标题】:Bridged cast in ARC and cocos2dARC和cocos2d中的桥接演员
【发布时间】:2012-07-25 01:51:55
【问题描述】:

我正在用一些书学习 cocos2d,即 Pablo Ruiz 的书,这里是一些代码:

[next runAction:[CCSequence actions:[CCDelayTime
                 actionWithDuration:2], 
       [CCFadeIn actionWithDuration:1],
    [CCDelayTime actionWithDuration:2],
     [CCCallFuncND actionWithTarget:self selector:@selector(cFadeAndShow:data:) 
                                                    data:images],nil]];


- (void) cFadeAndShow: (id)sender data:(void*) data
    {
        NSMutableArray *images = data;
        [self fadeAndShow:images];

    }

它在数据上显示错误:runAction 中的图像:

Implicit conversion of Objective-C pointer type 'NSMutableArray *' to C pointer type 'void *' requires a bridged cast

我尝试修复它无济于事。我该怎么办?我尝试将 void* 更改为 NSMutableArray,但仍然没有帮助。如何桥接施法?我尝试使用__bridge,但它说你不能桥接转换 NSMutableArray。

【问题讨论】:

  • 考虑改用 CCCallBlock

标签: objective-c ios cocos2d-iphone automatic-ref-counting


【解决方案1】:

尝试替换此调用:

[CCCallFuncND actionWithTarget:self selector:@selector(cFadeAndShow:data:) data:images],nil]];

用这个:

[CCCallFuncND actionWithTarget:self selector:@selector(cFadeAndShow:data:) data:(__bridge void*)images],nil]];

然后在您的淡入淡出和显示方法中,将其转换回一个 id:

NSMutableArray *images = (__bridge id) data;

【讨论】:

  • 这本质上是不安全的!如果在序列运行时释放图像,这将崩溃。如果序列在调用 func 选择器运行之前停止,并且您使用桥接传输/保留来防止崩溃,则图像对象将泄漏。 CCCallBlock 是在 ARC 下执行函数的安全方式。
猜你喜欢
  • 2012-04-16
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 2023-03-17
  • 1970-01-01
  • 2011-10-12
相关资源
最近更新 更多