是否可以在UITextField中使用NSMutableString来优化文本设置?

时间:2012-07-15 14:46:09

标签: ios optimization uitextfield nsmutablestring settext

使用Instruments Time Profiler已经发现UITextField text属性的设置在我的应用程序中非常昂贵,所以我想以某种方式优化它。我认为改变现有文本/ NSString可能比每次设置一个新的NSString对象更快,所以我尝试了以下内容:

@interface MutableTextField : UITextField

- (NSMutableString*) mutableText;

@end

@implementation MutableTextField

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];

    if (self) {
        self.text = [NSMutableString stringWithFormat:@""];
    }

    return self;
}

- (NSMutableString*) mutableText {
    return (NSMutableString*)self.text;
}

@end

这个想法是你会做类似下面的事情,而不是设置一个新的字符串:

[textField.mutableText replaceCharactersInRange:textRange withString:newText];

我很快发现,由于text中列出的UITextField属性为@property(nonatomic, copy) NSString *text,因此无效。 复制修饰符意味着我设置为文本的NSMutableString被复制(作为不可变NSString)然后设置 - 这意味着我实际上无法为其设置可变字符串UITextField

有人能看到解决方法吗?还是我卡住了?如果这根本无法实现,那么还有其他方法可以优化UITextField文本的设置吗?

1 个答案:

答案 0 :(得分:0)

这听起来像是过度优化的经典案例。您是否真的对代码进行了分析并发现它表现不佳?

设置一个新字符串比替换子字符串更强大更快,因为替换子字符串需要(根据定义)找到原始子字符串。

我的猜测是,您提议的更改实际上会降低性能。