`

CFStringRef相关的CFSTR与和NSString相关的@

阅读更多

CoreFoundation里面的CFStringRef和NSString*是可以直接转换的,两种也都有一个相似的用来直接赋常量的操作。

例如:

CFStringRef a = CFSTR("a");

NSString *b = @"b";

CFSTR是一个宏,这个宏的定义可能是CFStringMakeConstantString,也可能__builtin___CFStringMakeConstantString。如果是CFStringMakeConstantString,看看CFStringMakeConstantString的实现就会明白,CFSTR("a")是存放在一个全局字典里面的,下次用到CFSTR("a")的时候先查字典里面有没有,如果有就是用存在的,如果没有则分配一个,并且放到字典里面。

 

所以这里有两个需要注意的,

一:CFSTR分配出来的字符串对象是不能自己释放的,如果你释放了下次在使用就会使用到一个野对象;

二:多线程使用可能会出问题,因为全局的字典是没有锁的。

 

而NSString的@有些不一样,应该和__builtin___CFStringMakeConstantString有些类似,允许你多线程使用,同样也不需要你自己去release,可以理解为b是一个autorelease的对象,系统会自己自动收回b。如果想长时间持有b那就retain,但不要忘了release。

分享到:
评论

相关推荐

    KeywordTest

    可以设置lable的字体-(void)setText:(NSString *)text WithFont:(UIFont *)font AndColor:(UIColor *)color{ self.text = text; int len = [text length]; NSMutableAttributedString *mutaString = [...

    IOS 常见内存泄漏以及解决方案

    CFStringRef cfString = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)picDataString,NULL,CFSTR(:/?#[]@!$&'()*+,;=),kCFStringEncodingUTF8); NSString *baseString = [NSString ...

    IOS中对Url进行编码和解码示例

    本文主要介绍IOS中对Url进行编码和解码示例,具体如下: ...NSString *outputStr = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)input,NULL,(CFStringRef

    IOS 获取APP 版本号的实例详解

    labelVersion.text = [NSString stringWithFormat:@v%@, [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString*)kCFBundleVersionKey]]; 比较感兴趣的是后面的参数 kcFBundleVersionKey ,竟然是CFBundle...

    iCPU:迅捷版的https

    在这个项目中,我们必须使用dlsym获取隐藏在libMobileGestalt.dylib中的私有函数的函数指针,此后,我们以CFStringRef作为参数调用该函数,并期望返回CFStringRef值。 当dlsym返回UnsafeMutablePointer<Void> (或...

Global site tag (gtag.js) - Google Analytics