0

Instruments Time Profiler を使用すると、私のアプリではUITextFieldtextプロパティの設定が非常に高価であることが明らかになったので、どうにかしてこれを最適化したいと考えています。既存の 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テキストに設定した が ( immutable としてNSString) コピーされてから設定されることを意味しUITextFieldます。

誰でもこれを回避する方法を見ることができますか? それとも私は立ち往生していますか?これが単に達成できない場合、UITextFieldのテキストの設定を最適化できる他の方法はありますか?

4

1 に答える 1

0

これは、過剰な最適化の典型的なケースのように思えます。実際にコードをプロファイリングして、パフォーマンスが悪いことがわかりましたか?

新しい文字列を設定すると、部分文字列を置き換えるよりもはるかに高速になります。これは、部分文字列を置き換えるには (定義により) 元の部分文字列を見つける必要があるためです。

私の推測では、提案された変更は実際にはパフォーマンスを低下させるでしょう。

于 2012-07-15T14:52:23.767 に答える