您的位置:首页 > 移动开发 > Objective-C

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

2017-05-20 10:58 831 查看
第一步:



第二步:


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?



objective-c casting automatic-ref-counting
shareimprove
this question
edited Oct
8 '14 at 5:31





Jayprakash
Dubey

12.5k28188

asked Jul 17 '11 at 17:37





Michael
Rowe

2671518

 
 
You can use '_bridge' or 'CFBridgingRetain' to resolve this error. – Jayprakash
Dubey Oct
8 '14 at 4:57
add
a comment


3 Answers

activeoldestvotes

up
vote56down
voteaccepted
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).

shareimprove
this answer
edited Jul
17 '11 at 18:57

answered Jul 17 '11 at 17:52





jtbandes

75.7k25162197

 
 
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
add
a comment
up
vote18down
vote
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.

shareimprove
this answer
answered Oct 2 '11 at 4:15





benvolioT

3,82312629

 
 
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
add
a comment
up
vote0down
vote
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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐