CFStringRef a = CFSTR("a");
NSString *b = @"b";
一、CFSTR是一個宏震檩,這個宏的定義可能是CFStringMakeConstantString藏畅,也可能是__builtin___CFStringMakeConstantString。如果是CFStringMakeConstantString,看看CFStringMakeConstantString的實現(xiàn)就會明白阅悍,CFSTR("a")是存放在一個全局字典里面的朗伶,下次用到CFSTR("a")的時候先查字典里面有沒有弦撩,如果有就是用存在的,如果沒有則分配一個论皆,并且放到字典里面益楼。所以這里有兩個需要注意的:
1、CFSTR分配出來的字符串對象是不能自己釋放的点晴,如果你釋放了下次在使用就會使用到一個野對象感凤;
2、多線程使用可能會出問題粒督,因為全局的字典是沒有鎖的陪竿。
二、而NSString的@有些不一樣屠橄,應該和__builtin___CFStringMakeConstantString有些類似族跛,允許你多線程使用,同樣也不需要你自己去release锐墙,可以理解為b是一個autorelease的對象礁哄,系統(tǒng)會自己自動收回b。如果想長時間持有b那就retain溪北,但不要忘了release桐绒。
三、相互轉換
CFStringRef aCFString = (CFStringRef)aNSString;
NSString *aNSString = (NSString *)aCFString;