pap*_*apr 165 string cocoa cfstring
NSString *aNSString;
CFStringRef aCFString;
aCFString = CFStringCreateWithCString(NULL, [aNSString UTF8String], NSUTF8StringEncoding);
aCFString = CFXMLCreateStringByUnescapingEntities(NULL, aCFString, NULL);
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到一个新NSString的aCFString?
Nil*_*ect 346
NSString和CFStringRef是"免费桥接",意味着您可以简单地在它们之间进行类型转换.
例如:
CFStringRef aCFString = (CFStringRef)aNSString;
Run Code Online (Sandbox Code Playgroud)
完美而透明地工作.同样:
NSString *aNSString = (NSString *)aCFString;
Run Code Online (Sandbox Code Playgroud)
以前的语法适用于MRC.如果您使用ARC,则新的转换语法如下:
NSString *aNSString = (__bridge NSString *)aCFString;
Run Code Online (Sandbox Code Playgroud)
也有效.需要注意的关键是CoreFoundation经常会返回带有+1引用计数的对象,这意味着它们需要被释放(所有CF [Type] Create格式函数都会这样做).
好的是,在Cocoa中,您可以安全地使用自动释放或释放来释放它们.
cle*_*ght 16
如果您在最新版本的Mac OS X/Objective C中使用ARC,那真的很简单:
NSString *happyString = (NSString *)CFBridgingRelease(sadString);
Run Code Online (Sandbox Code Playgroud)
但是,当您尝试将自由桥接CFString转换为NSString并提供自动将其包装在CFBridgingRelease()中时,Xcode会很高兴地警告您,您可以接受它并让它在您单击该选项时自动为您插入包装器.
Mar*_*ote 12
它们是等价的,所以你可以只转换CFStringRef:
NSString *aNSString = (NSString*)aCFString;
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅免费桥接类型.
| 归档时间: |
|
| 查看次数: |
91261 次 |
| 最近记录: |