Objective c 使用自动引用计数问题获取指针隐式转换错误
我收到一个错误。ARC不允许将Objective-C指针隐式转换为“void”Objective c 使用自动引用计数问题获取指针隐式转换错误,objective-c,ios,cocoa-touch,automatic-ref-counting,Objective C,Ios,Cocoa Touch,Automatic Ref Counting,我收到一个错误。ARC不允许将Objective-C指针隐式转换为“void” -(void)openAnimation { NSValue *contextPoint =[NSValue valueWithCGPoint:self.view.center]; [UIView beginAnimation:nil context:contextPoint]; // getting error here } 有人能帮我解决这个错误吗 谢谢首先,我要指出,使用基于块的动画方法
-(void)openAnimation {
NSValue *contextPoint =[NSValue valueWithCGPoint:self.view.center];
[UIView beginAnimation:nil context:contextPoint]; // getting error here
}
有人能帮我解决这个错误吗
谢谢首先,我要指出,使用基于块的动画方法更容易实现这类功能。对于iOS4和iOS5 但要回答您的特定问题,上下文参数是一个void*。ARC不(不能)维护对void*指针的任何管理,因此当您将“contextPoint”(这是一个NSValue*)传递给此方法时,ARC实际上失去了对它的跟踪 编译器将允许使用桥接转换进行此操作。但您还必须确保您的“contextPoint”在该方法之外仍然存在,因此您需要的特定强制转换是保留的,即净保留计数为+1的强制转换:
[UIView beginAnimation:nil context:(__bridge_retained void *)contextPoint];
这就解决了眼前的问题,希望您现在将泄漏该contextPoint。因此,在您的animationDidStart:context:
或animationDidStop:finished:context:
(无论您打算在哪里使用此contextPoint)中,您需要将+1计数与以下内容相平衡:
NSValue *contextPoint = (__bridge_transfer NSValue *)context;
这会将该对象桥接回ARC的控制之下,并且_ubridge_传输会告诉ARC释放该对象以平衡先前保留的_ubridge_
同样,使用基于块的方法,让圆弧和块为您处理这些事情。他们已经知道如何正确捕获和保留动画或完成块中所需的对象
我希望这是有意义的。因此,首先,我要指出,使用基于块的动画方法更容易做到这一点。对于iOS4和iOS5 但要回答您的特定问题,上下文参数是一个void*。ARC不(不能)维护对void*指针的任何管理,因此当您将“contextPoint”(这是一个NSValue*)传递给此方法时,ARC实际上失去了对它的跟踪 编译器将允许使用桥接转换进行此操作。但您还必须确保您的“contextPoint”在该方法之外仍然存在,因此您需要的特定强制转换是保留的,即净保留计数为+1的强制转换:
[UIView beginAnimation:nil context:(__bridge_retained void *)contextPoint];
这就解决了眼前的问题,希望您现在将泄漏该contextPoint。因此,在您的animationDidStart:context:
或animationDidStop:finished:context:
(无论您打算在哪里使用此contextPoint)中,您需要将+1计数与以下内容相平衡:
NSValue *contextPoint = (__bridge_transfer NSValue *)context;
这会将该对象桥接回ARC的控制之下,并且_ubridge_传输会告诉ARC释放该对象以平衡先前保留的_ubridge_
同样,使用基于块的方法,让圆弧和块为您处理这些事情。他们已经知道如何正确捕获和保留动画或完成块中所需的对象
我希望这是有意义的。使用未声明的标识符\u bridge\u保留。看起来您缺少一个下划线。应该保留桥牌(桥牌前的两个底部)谢谢。我忘了一个下划线是我的错。谢谢:)使用了未声明的标识符_bridge _retained。看起来您缺少下划线。应该保留桥牌(桥牌前的两个底部)谢谢。我忘了一个下划线是我的错。谢谢:)