0

Instruments Time Profiler 的使用表明UITextField'text属性的设置在我的应用程序中非常昂贵,因此我想以某种方式对其进行优化。我认为改变现有的 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属性列在UITextFieldas 中@property(nonatomic, copy) NSString *text复制修饰符意味着我为文本设置的NSMutableString被复制(作为不可变的NSString)然后设置 - 这意味着我实际上无法为UITextField.

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

4

1 回答 1

0

在我看来,这听起来像是过度优化的经典案例。您是否真的分析过代码并发现它的性能很差?

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

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

于 2012-07-15T14:52:23.767 回答