2012-08-23 107 views
0

如果我们不使用CFRelease使用ARC有什么选择。如果我们使用ARC,那么CFRelease会抛出错误。我尝试使用_bridge和_bridge_transfer都不起作用。什么是CFRelease的替代

+0

我不期待H2CO3的任何评论,即用户“Nikolai Ruhe”如果且仅当它是建设性的我会接受其他我不会接受。 – user1617481

+1

对不起,如果我打了@ H2CO3,但这个问题不够具体,不足以帮助我们诊断您的问题。张贴一些代码,以及一些什么/哪里/如何失败的描述。 – rickster

回答

0

没有其他选择CFReleaseCFRelease是必要的,ARC或不。 ARC管理ObjC对象只有

在某些情况下,框架可能会为特定类型提供更专门的版本(例如CGContextRelease),但实际上没有其他选择。

CFRelease指出通过NULL时出错。如果这是你看到的错误而你不想要这种行为,那么你总是可以编写自己的包装函数,它在传递之前先测试参数。

如果您有更具体的错误或更具体的问题,我们可能会帮助更多。

0

听起来好像你正在尝试在代码中交替使用一些Core Foundation和Objective-C对象,但是没有看到任何代码,我无法确定发生了什么。但是,有一个非常重要的说明需要提及,以防万一您不知道:

ARC仅自动管理Objective-C对象的内存,这就是为什么您不需要再拨打release。因此,ARC不会为而不是自动管理Core Foundation对象的内存,这就是您使用CFRelease()的原因。

+1

*如果您尝试在Objective-C对象上使用CFRelease(),则会出现错误。* - 这不是事实。当然,如果有一个引用计数*不平衡*是错误的。 – justin

+0

我正在添加这些代码行NSString \t \t \t NSString * lObjContactNumberLabelPtr =(NSString *)nil; lObjContactNumberLabelPtr =(__bridge_transfer NSString *)ABMultiValueCopyLabelAtIndex(pPhonePropertyPtr,i); lObjContactInfoPtr = [lObjContactNumberLabelPtr stringByReplacingOccurrencesOfString:@“_ $!<”withString:@“”]; CFRelease( ); – user1617481