NSTextAttachment 自定义后的循环引用问题
NSTextAttachment
的封装类
#import "DDAutoFitTextAttachment.h"@implementation DDAutoFitTextAttachment/** 重载此方法 使得图片的大小和行高是一样的。 @param textContainer textContainer @param lineFrag lineFrag @param position position @param charIndex charIndex @return attachmentBounds */- (CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex{ return CGRectMake(0, -3, lineFrag.size.height, lineFrag.size.height);}@end复制代码
NSAttributedString
的分类
#import "NSAttributedString+DDLabel.h"#import "DDAutoFitTextAttachment.h"@implementation NSAttributedString (DDLabel)- (instancetype)initWithTitle:(NSString *)title titleFont:(UIFont *)titleFont titleColor:(UIColor *)titleColor image:(UIImage *)image imagePosition:(DDAttributedStringImagePosition)imagePosition{ NSMutableAttributedString *superAttrStr = [[NSMutableAttributedString alloc] initWithString:title attributes: @{ NSFontAttributeName: titleFont, NSForegroundColorAttributeName: titleColor}]; DDAutoFitTextAttachment *imageAttachment = [[DDAutoFitTextAttachment alloc] init]; imageAttachment.image = image; NSAttributedString *imageAttStr = [NSAttributedString attributedStringWithAttachment:imageAttachment]; switch (imagePosition) { case DDAttributedStringImagePositionLeft: { [superAttrStr insertAttributedString:imageAttStr atIndex:0]; } break; case DDAttributedStringImagePositionMiddle: { NSAssert(imagePosition != DDAttributedStringImagePositionMiddle , @"图片不能设置为 DDAttributedStringImagePositionMiddle"); } break; case DDAttributedStringImagePositionRight: { [superAttrStr insertAttributedString:imageAttStr atIndex: superAttrStr.length]; } break; } return superAttrStr.copy;}复制代码
只有这么几行代码,只是为了调整图片与文字的大小.
- 结果 竟然没有释放