这是我的功能:
CFStringRef nameWithType (someEnum type) {
NSString* r;
switch (type) {
case type1:
r=@"type1";
break;
case type2:
r=@"type2";
break;
case type3:
r=@"type3";
break;
}
return (__bridge CFStringRef)r; // analyzer warns: Address of stack memory associated with local variable 'r' returned to caller.
}
答案 0 :(得分:4)
这将消除非常难以消除的分析仪警告。
CFStringRef nameWithType2(someEnum type){
CFStringRef string = NULL;
switch (type) {
case type1:
string = (__bridge CFStringRef)@"type1";
break;
case type2:
string = (__bridge CFStringRef)@"type2";
break;
case type3:
string = (__bridge CFStringRef)@"type3";
break;
}
return string;
}
请记住不要让这个内存泄漏。
答案 1 :(得分:2)
实际上有“传统方式”(从NSObject之前的时间开始)到不使用NSString文字,而是使用CFSTR宏,如下所示:
CFStringRef nameWithType2(someEnum type){
CFStringRef string = NULL;
switch (type) {
case type1:
string = CFSTR("type1");
break;
case type2:
string = CFSTR("type2");
break;
case type3:
string = CFSTR("type3");
break;
}
return string;
}
CFSTR(c_string)
是创建CFStringRef的最短方法,比(__bridge CFStringRef)@"NSString"
短得多
此外,如果有人看到这个代码,你会因为知道CFSTR而获得更高的极客。它有N00B来创建NSString文字,然后将其转换为CFStringRef并且需要添加ARC内存管理所有权转移标签....而不是立即创建CFStringRef。