`

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。

分享到:
评论

相关推荐

    iOS 开发笔记

    NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", ...

    iphone 手机通讯录有关访问

    本文将深入探讨如何在iPhone应用程序中操作通讯录,基于标题“iPhone 手机通讯录有关访问”以及描述“iPhone 有关通讯录内容的操作”,我们将详细解析这一主题下的关键知识点。 ### 通讯录在iPhone应用中的作用 ...

    iOS中常用的宏定义总结

    #define NSString2CFSTR(nsStr) ((__bridge CFStringRef)(nsStr)) ``` 这两个宏分别用于CFString到NSString和NSString到CFString的转换。 10. **内存管理宏**: 在MRC(Manual Reference Counting)环境下,...

    iphone开发常用代码

    CFSTR("!*'();:@&=+$,/?%#[]"), kCFStringEncodingUTF8 ); [result autorelease]; return result; } ``` 该函数接收一个`NSString`类型的参数`string`,返回经过URL编码后的字符串。编码过程中排除了部分特殊...

    IOS常用文档

    CFSTR("!*'();:@&=+$,/?%#[]"), kCFStringEncodingUTF8); [result autorelease]; return result; } ``` #### 功能描述 此方法用于将传入的字符串进行URL编码。它使用`CFURLCreateStringByAddingPercentEscapes`...

    汉字转成拼音

    "汉字转成拼音"这个主题涉及到的是自然语言处理(NLP)的一个子领域,它主要依赖于编程语言Objective-C(简称objc)的相关库和技术。Xcode是苹果公司开发的集成开发环境,用于编写Objective-C代码。 在Objective-C...

    QTSSDictionary理解

    QTSSDictionary是...总之,QTSSDictionary是QuickTime Streaming Server中处理元数据和配置信息的重要工具,通过学习和实践相关的示例代码,我们可以更好地掌握其功能和使用方法,从而在实际开发中更加得心应手。

    KeywordTest

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

    怎么防止ios系统被抓包?防止ios系统被抓包的方法

    防止iOS系统被抓包的方法 防止iOS系统被抓包是一个非常重要的安全问题。iOS系统可以通过各种抓包工具,例如Fiddler、Charles等,来获取APP发送的API,...我们可以通过检测代理和防止抓包来保护我们的APP和用户信息。

    获取本机IP

    NSDictionary *info = CNCopyCurrentNetworkInfo((__bridge CFStringRef)interface); if (info) { NSDictionary *addresses = info[@"BSSID"]; for (NSString *key in addresses) { if ([key isEqualToString:@...

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

    在iOS开发中,URL编码和解码是处理网络请求时必不可少的部分。URL(统一资源定位符)有时会包含特殊字符,这些字符在HTTP协议中可能具有特殊含义,因此需要进行编码以确保数据的正确传输。本文将详细讲解如何在...

    ARC探秘:Objective-C中的自动引用计数革命

    CFStringRef cfString = CFStringCreateWithCharacters(kCFAllocatorDefault, "Hello, ARC", 12); NSString *nsString = (__bridge NSString *)cfString; // 使用 nsString CFRelease(cfString); ``` 这里的`__...

    IOS获取设备MAC地址及MD5加密

    info = CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam); if (info && [info objectForKey:@"BSSID"]) { NSString *macAddress = [info objectForKey:@"BSSID"]; // BSSID通常格式为XX:XX:XX:XX:XX:XX,...

    利用SSKeyChain存储秘钥以及生成UUID

    CFStringRef uuidString = CFUUIDCreateString(NULL, uuidObj); CFRelease(uuidObj); NSString *uuid = (NSString *)CFBridgingRelease(uuidString); ``` `CFUUID`生成的UUID每次都是唯一的,不会因应用卸载而改变。...

    IOS 获取已连接的wifi信息的实现代码

    3. `SSIDData`:SSID的原始数据形式,通常与SSID键的值相同,但以NSData对象表示。 4. `RSSI`:信号强度,以dBm(分贝毫瓦)为单位。 5. `Security`:表示网络的安全类型,如WEP、WPA、WPA2等。 在非ARC(自动引用...

    获取UUID源码.zip

    CFStringRef uuidString = CFUUIDCreateString(kCFAllocatorDefault, uuidObj); ``` 4. 转换为Objective-C的NSString: ```objc NSString *uuidStringObj = (__bridge NSString *)uuidString; ``` 5. 打印或使用生成...

    IOS 开发之读取addressbook的实现实例

    iOS开发中的AddressBook框架是用来访问和管理用户设备上的联系人数据的。在iOS应用程序中,如果需要读取用户的通讯录信息,就需要使用AddressBook API。本文将详细介绍如何在iOS开发中实现读取addressbook的实例。 ...

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

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

    在ios工程中如何判断当前网络环境是IPV6还是IPV4 源码下载

    以下是如何在iOS工程中判断当前网络环境是IPv4还是IPv6的详细步骤和相关知识点。 首先,我们需要理解IPv4和IPv6的区别。IPv4(Internet Protocol Version 4)是互联网上最广泛使用的协议,使用32位地址,最多可以...

    iOS获取当前连接的WiFi以及IP地址

    在iOS开发中,有时我们需要获取设备当前连接的WiFi网络信息,包括WiFi的SSID(服务集标识,即WiFi名称)和设备的IP地址。本篇文章将详细介绍如何通过Objective-C实现这一功能。 首先,为了获取设备的本地IP地址,...

Global site tag (gtag.js) - Google Analytics