当前位置:  开发笔记 > IOS > 正文

如何将CFStringRef转换为NSString?

如何解决《如何将CFStringRef转换为NSString?》经验,为你挑选了3个好方法。

NSString和CFStringRef是"免费桥接",意味着您可以简单地在它们之间进行类型转换.

例如:

CFStringRef aCFString = (CFStringRef)aNSString;

完美而透明地工作.同样:

NSString *aNSString = (NSString *)aCFString;

以前的语法适用于MRC.如果您使用ARC,则新的转换语法如下:

NSString *aNSString = (__bridge NSString *)aCFString;

也有效.需要注意的关键是CoreFoundation经常会返回带有+1引用计数的对象,这意味着它们需要被释放(所有CF [Type] Create格式函数都会这样做).

好的是,在Cocoa中,您可以安全地使用自动释放或释放来释放它们.



1> NilObject..:

NSString和CFStringRef是"免费桥接",意味着您可以简单地在它们之间进行类型转换.

例如:

CFStringRef aCFString = (CFStringRef)aNSString;

完美而透明地工作.同样:

NSString *aNSString = (NSString *)aCFString;

以前的语法适用于MRC.如果您使用ARC,则新的转换语法如下:

NSString *aNSString = (__bridge NSString *)aCFString;

也有效.需要注意的关键是CoreFoundation经常会返回带有+1引用计数的对象,这意味着它们需要被释放(所有CF [Type] Create格式函数都会这样做).

好的是,在Cocoa中,您可以安全地使用自动释放或释放来释放它们.


如果您正在使用ARC,则此案例的新强制转换语法现在为NSString*aNSString =(__ bridge NSString*)aCFString
谢谢MikeG,我不得不做类似的逆转换:NSString*str = @"abc"; CFStringRef cstrref =(__ bridge CFStringRef)str;
@NilObject请更新您的答案以包括ARC,以便搜索者不必查看评论.谢谢.

2> clearlight..:

如果您在最新版本的Mac OS X/Objective C中使用ARC,那真的很简单:

NSString *happyString = (NSString *)CFBridgingRelease(sadString);

但是,当您尝试将自由桥接CFString转换为NSString并提供自动将其包装在CFBridgingRelease()中时,Xcode会很高兴地警告您,您可以接受它并让它在您单击该选项时自动为您插入包装器.


很简单:
我不确定,但是我认为`(__bridge NSString *)`就足够了:用`CFBridgingRelease()`增加保留计数是没有意义的。

3> Martin Cote..:

它们是等价的,所以你可以只转换CFStringRef:

NSString *aNSString = (NSString*)aCFString;

有关详细信息,请参阅免费桥接类型.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有