如何解决"引用计数对象在发布后使​​用"?

时间:2014-12-03 06:16:24

标签: ios iphone

我收到以下错误,但如何解决? 绿色圆圈突出显示错误“释放后使用参考计数对象”

已编辑:我正在使用以下方法

+ (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];


enter image description here

2 个答案:

答案 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世界。

根据documentation

  

__ bridge_transfer或CFBridgingRelease将非Objective-C指针移动到Objective-C,并将所有权转移到ARC。 ARC负责   放弃对象的所有权。