【问题标题】:sending CFTypeRef (aka const void*) to parameter of type 'void *' discards qualifiers将 CFTypeRef(又名 const void*)发送到“void *”类型的参数会丢弃限定符
【发布时间】:2013-06-11 07:10:04
【问题描述】:

以下代码中出现警告。使用 ARC。

if ( aAnim ) {
    [UIView beginAnimations:nil context:CFBridgingRetain([NSNumber numberWithInt:aOff])];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(postSpin:finished:toCCWCellOffset:)];
}

【问题讨论】:

  • 在哪一行? aOff的定义是什么?
  • @LoïsDiQual 在线 [UIView beginAnimations:nil context:CFBridgingRetain([NSNumber numberWithInt:aOff])] & aOff 是一个整数。

标签: iphone objective-c ios6


【解决方案1】:

CFBridgingRetain 返回一个CFTypeRef,它被声明为const void *。

[UIView beginAnimations:context:] 的 context 参数是 void *(没有 const),因此发出警告。

您可以改用__bridge_retained 来修复该警告:

[UIView beginAnimations:nil context:(__bridge_retained void *)[NSNumber numberWithInt:aOff]];

请注意,您必须通过释放上下文来平衡 retain 用过的。例如,这可以通过转移所有权在“停止选择器”中完成 回到一个 Objective-C 对象:

id obj = (__bridge_transfer id)context;

【讨论】:

  • 我可以使用 [UIView beginAnimations:nil context:(__bridge void *)[NSNumber numberWithInt:aOff]];
  • @Zubair:不,因为数字对象(在这种情况下将在自动释放池中)可以在动画完成之前释放。
猜你喜欢
  • 2013-06-03
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多