使用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
文本的设置吗?
答案 0 :(得分:0)
这听起来像是过度优化的经典案例。您是否真的对代码进行了分析并发现它表现不佳?
设置一个新字符串比替换子字符串更强大更快,因为替换子字符串需要(根据定义)找到原始子字符串。
我的猜测是,您提议的更改实际上会降低性能。