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;
}
只有这么几行代码,只是为了调整图片与文字的大小.
- 结果 竟然没有释放
![](https://img.haomeiwen.com/i1435355/ea5ec0bc24343020.png)
![](https://img.haomeiwen.com/i1435355/eb0c1d7dc360adcc.png)
网友评论