NSString *b = @"b";
壹、CFSTR是壹個宏,這個宏的定義可能是CFStringMakeConstantString,也可能是__builtin___CFStringMakeConstantString。如果是CFStringMakeConstantString,看看CFStringMakeConstantString的實現就會明白,CFSTR("a")是存放在壹個全局字典裏面的,下次用到CFSTR("a")的時候先查字典裏面有沒有,如果有就是用存在的,如果沒有則分配壹個,並且放到字典裏面。所以這裏有兩個需要註意的:
1、CFSTR分配出來的字符串對象是不能自己釋放的,如果妳釋放了下次在使用就會使用到壹個野對象;
2、多線程使用可能會出問題,因為全局的字典是沒有鎖的。
二、而NSString的@有些不壹樣,應該和__builtin___CFStringMakeConstantString有些類似,允許妳多線程使用,同樣也不需要妳自己去release,可以理解為b是壹個autorelease的對象,系統會自己自動收回b。如果想長時間持有b那就retain,但不要忘了release。
三、相互轉換
CFStringRef aCFString = (CFStringRef)aNSString;
NSString *aNSString = (NSString *)aCFString;