我收到以下错误,但如何解决?
绿色圆圈突出显示错误“释放后使用参考计数对象”
已编辑:我正在使用以下方法
+ (NSString *)GetUUID
{
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
NSString *str = (__bridge NSString *)string;
CFRelease(string);
return str;
}
编辑:使用vijay的以下简单代码解决
NSUUID *UUID = [NSUUID UUID];
NSString* stringUUID = [UUID UUIDString];
答案 0 :(得分:1)
我希望您因为[DBManager GetUUID]
方法而遇到此错误,您将在其中释放CFRelease(cfUuid)
。
要获取UUID,请尝试使用此简化的API
+ (NSString *)GetUUID
{
NSUUID *UUID = [NSUUID UUID];
NSString* stringUUID = [UUID UUIDString];
return stringUUID;
}
答案 1 :(得分:0)
在CFUUIDCreateString
之后,您会获得一个您拥有的字符串。通过使用__bridge
,您可以将str
设置为相同的字符串。因此,当您CFRelease(string)
不再拥有内存支持str
时......
要避免这种情况,请使用像@vijay所说的Cocoa方法,或者删除CFRelease
并使用__bridge_transfer NSString*
代替__bridge
。这告诉编译器您正在将您拥有的CF对象传输到ARC世界。
__ bridge_transfer或CFBridgingRelease将非Objective-C指针移动到Objective-C,并将所有权转移到ARC。 ARC负责 放弃对象的所有权。