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

幸いなことに、NSAttributedStringNSMutableAttributedStringは両方とも無料で Core Foundation の対応するCFAttributedStringRefCFMutableAttributedStringRefそれぞれにブリッジされています。つまり、たとえば a を作成し、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;
}
于 2012-12-19T12:15:33.413 に答える