Search code examples
iphonecocoa-touchioscore-text

Do NSMutableAttributedString addAttribute methods retain the passed in value?


For example is the following code memory safe?

NSMutableAttributedString *str = ...;

CTFontRef aFont = CTFontCreateWithName((CFStringRef)fontName, size, NULL);
[str addAttribute:(NSString*)kCTFontAttributeName value:(id)aFont range:range];
CFRelease(aFont);

Also, is CTFontCreateWithName efficient to call multiple times or should some effort be made to cache CTFontRef's for the same font/size?


Solution

  • I believe it is safe to release the font object after adding it as an attribute. I have done so in my own Core Text code and never have any issues.

    As for caching, it would make sense to keep a font object around if it will be used multiple times rather than releasing it and recreating it many times. Though, this is likely pre-optimisation, so I wouldn't make any conscious effort just yet. Profile it with your current code and decide whether or not the extra microseconds will be worth the work.