0

我有类似于下面的 CFObject 返回方法

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

}

在这里,我遇到了内存泄漏,CFRelease(as3);因为它是一个返回方法,所以我没有释放该对象。有没有办法解决内存泄漏?

4

1 回答 1

1

幸运的是,NSAttributedString两者NSMutableAttributedString都可以免费连接到他们的核心基金会对应CFAttributedStringRefCFMutableAttributedStringRef。这意味着您可以创建例如 aCFAttributedStringRef并将其简单地转换为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;
}
于 2012-12-19T12:15:33.413 回答