NSString *aNSString;
CFStringRef aCFString;
aCFString = CFStringCreateWithCString(NULL, [aNSString UTF8String], NSUTF8StringEncoding);
aCFString = CFXMLCreateStringByUnescapingEntities(NULL, aCFString, NULL);如何从aCFString获取新的NSString
发布于 2009-03-12 20:37:33
NSString和CFStringRef是“免费桥接的”,这意味着你可以简单地在它们之间进行类型转换。
例如:
CFStringRef aCFString = (CFStringRef)aNSString;完美而透明地工作。同样:
NSString *aNSString = (NSString *)aCFString;之前的语法用于MRC。如果您使用的是ARC,则新的强制转换语法如下:
NSString *aNSString = (__bridge NSString *)aCFString;效果也很好。需要注意的关键一点是,CoreFoundation通常会返回引用计数为+1的对象,这意味着它们需要被释放(所有CFTypeCreate格式函数都会这样做)。
好消息是,在Cocoa中,您可以安全地使用自动释放或释放来释放它们。
发布于 2009-03-12 20:37:21
它们是等效的,所以您可以直接转换CFStringRef:
NSString *aNSString = (NSString*)aCFString;有关更多信息,请参阅Toll-Free Bridged Types。
发布于 2009-03-13 00:27:44
我要补充的是,您不仅可以通过类型转换从CFString转换到NSString,而且它也可以以另一种方式工作。您可以删除CFStringCreateWithCString消息,这将减少稍后需要发布的内容。(CF在Cocoa使用alloc的情况下使用Create,因此无论哪种方式,您都需要发布它。)
生成的代码如下:
NSString *escapedString;
NSString *unescapedString = [(NSString *) CFXMLCreateStringByUnescapingEntities(NULL, (CFStringRef) escapedString, NULL) autorelease];https://stackoverflow.com/questions/640367
复制相似问题