2012-12-19 43 views
0

我有CFObject返回相同的方法,下面如何在方法返回CFObject時釋放(ARC)CoreFoundation對象?

-(CFMutableAttributedStringRef)getAttStrForArray:(NSArray*)substrings forString:(NSString*)aStr 
{ 

    CFMutableAttributedStringRef as3 = CFAttributedStringCreateMutable(NULL, 0); 
    CFAttributedStringBeginEditing(as3); 
    CTFontRef font = CTFontCreateWithName(CFSTR("HelveticaNeue-Bold"), 12.5, NULL); 
    CFAttributedStringReplaceString(as3, CFRangeMake(0, 0), (__bridge CFStringRef)aStr); 
    ...... 
    CFAttributedStringEndEditing(as3); 
    //CFRelease(as3); 
    return as3; 

} 

這裏我得到的內存泄漏,我hav't發佈CFRelease(as3);對象,因爲它是一個迴歸方法。有什麼辦法來解決內存泄漏?

回答

1

幸運的是,NSAttributedStringNSMutableAttributedString都免費橋接到他們的核心基金會對應CFAttributedStringRefCFMutableAttributedStringRef分別。這意味着你可以創建一個例如CFAttributedStringRef並簡單地將其轉換爲NSAttributedString指針,然後調用NSAttributedString方法就可以工作。

所以只是彌補其轉換成圓弧

NSAttributedString *nsString = (__bridge transfer NSAttributedString*)as3

-(NSMutableAttributedString*)getAttStrForArray:(NSArray*)substrings forString:(NSString*)aStr 
{ 
    CFMutableAttributedStringRef as3 = CFAttributedStringCreateMutable(NULL, 0); 
    //... 
    return (__bridge transfer NSAttributedString*)as3; 
} 
+0

我不喜歡這樣'NSAttributedString *的NSString =(__bridge_transfer NSAttributedString *)AS3; // CFRelease(as3); return(__bridge CFMutableAttributedStringRef)nsString; '但在'CFAttributedStringCreateCopy(NULL,as2):NULL;'上拋出錯誤';' –

+0

我沒有找到你的例子中的任何更新! –

+0

我編輯了我的例子 –