2014-12-03 51 views
1

我收到以下錯誤,但如何解決它?
錯誤被突出顯示與綠色圓圈「引用計數對象用於它被釋放之後」

被修改:我使用以下方法
如何解決「引用計數對象被釋放後使用」的錯誤?

+ (NSString *)GetUUID 
{ 
    CFUUIDRef theUUID = CFUUIDCreate(NULL); 
    CFStringRef string = CFUUIDCreateString(NULL, theUUID); 
    CFRelease(theUUID); 
    NSString *str = (__bridge NSString *)string; 
    CFRelease(string); 
    return str; 
} 


編輯:已解決通過使用維傑的以下簡單代碼

NSUUID *UUID = [NSUUID UUID]; 
NSString* stringUUID = [UUID UUIDString]; 


enter image description here

回答

1

我希望,你得到,因爲[DBManager GetUUID]方法,在那裏你會釋放CFRelease(cfUuid)此錯誤。

要獲得UUID,試試這個簡單的API

+ (NSString *)GetUUID 
{ 

    NSUUID *UUID = [NSUUID UUID]; 
    NSString* stringUUID = [UUID UUIDString]; 

    return stringUUID; 

} 
+0

那麼,還是得到消息? – 2014-12-03 07:18:22

+0

是你使用像更新的答案? – 2014-12-03 07:25:27

+0

感謝vijay,我用簡化的API替換了我的方法代碼,然後它運行良好。 – 2014-12-03 07:34:56

0

CFUUIDCreateString後,你會得到你自己的字符串。通過使用__bridge,您可以將str設置爲相同的字符串。所以,當你CFRelease(string)你沒有自己的內存支持str了...

爲了避免這種情況,要麼喜歡@vijay說使用可可方法,或刪除CFRelease和使用__bridge_transfer NSString*代替__bridge。這告訴編譯器你正在將你擁有的CF對象轉移到ARC世界中。

documentation

__bridge_transfer或CFBridgingRelease移動的非目標C指針Objective-C和也所有權轉移給ARC。 ARC負責放棄對象的所有權 。

+0

感謝Thomas Deniau指出。我用vijay的代碼取代了我的方法,現在它正在工作。 – 2014-12-03 07:34:17

相關問題