cast of Objective-C pointer type 'NSString *' to C pointer type 'CFStringRef' (aka 'const struct __C

第一步:


第二步:



http://stackoverflow.com/questions/6725558/cast-of-objective-c-pointer-type-nsstring-to-c-pointer-type-cfstringref-a


When converting an Objective-C program to a Objective-C ARC, I get the error:

"cast of Objective-C pointer type 'NSString *' to C pointer type 'CFStringRef' (aka 'const struct __CFString *') requires a bridged cast "

The code is as follows:

- (NSString *)_encodeString:(NSString *)string
{
    NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, 
                                   (CFStringRef)string, // this is line in error
                                   NULL, 
                                   (CFStringRef)@";/?:@&=$+{}<>,",
                                   kCFStringEncodingUTF8);
    return [result autorelease];
}

What is a bridged cast?

Screenshot for error

share improve this question
 
 
You can use '_bridge' or 'CFBridgingRetain' to resolve this error. –  Jayprakash Dubey  Oct 8 '14 at 4:57

3 Answers

up vote 56 down vote accepted

Have a look at the ARC documentation on the LLVM website. You'll have to use __bridge or one of the other keywords.

This is because Core Foundation objects (CF*Refs) are not controlled by ARC, only Obj-C objects are. So when you convert between them, you have to tell ARC about the object's ownership so it can properly clean them up. The simplest case is a __bridge cast, for which ARC will not do any extra work (it assumes you handle the object's memory yourself).

share improve this answer
 
 
Thanks, understand.. and the link ont he ARC Documentation was very helpful on the type of __bridge cast to use. –  Michael Rowe  Jul 17 '11 at 21:55

Here is a nice ARC tutorial that I found to be easier to understand than Apple's documentation that @jtbandes references. 

Take a look at the section titled "Toll free bridging" in particular.

share improve this answer
 
 
Awesome ARC explanation with clear __bridge examples. –  dontangg  Jun 8 '12 at 22:37
 
Mike's posts are always awesome. –  orange80  Dec 29 '12 at 5:34

I know this is an old thread, I came across this issue while I need to use 

- (NSString *)URLEncodedString 
{
    NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                       (CFStringRef)self,
                                                                       NULL, CFSTR("!*'();:@&=+$,/?%#[]"),
                                                                       kCFStringEncodingUTF8);
[result autorelease];
return result;
}

So what I did is go to Target > Build phase > Compile sources. There is your file listed, double click on that and add following lines next to your file.

-fno-objc-arc



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值