Frage

Ich arbeite an einem iPhone-App, die wir in Englisch und Japanisch für unsere erste Version sind lokalisierende. Wir NSLocalizedString() häufig rufen Sie die entsprechende lokalisierte Zeichenfolge für die Anzeige zu laden. Ist es besser, im Allgemeinen die lokalisierten Zeichenfolgen in Instanzvariablen für die nächste Zeit zu sparen wir sie brauchen, oder bin ich Mikro-Optimierung hier und sollte ich nachladen nur die Zeichenfolge jedes Mal, es gebraucht wird?

War es hilfreich?

Lösung

Dies ist eines davon ist „es kommt“ Antworten.

Beim NSLocalizedString einer Suche in dem Bündel beinhaltet die Durchführung. Diese Lookups sind ziemlich schnell, aber nicht frei. Ob diese Rückgabewert zwischenzuspeichern oder einfach nur die Bequemlichkeit der Aufruf NSLocalizedString wird davon abhängen, wie es verwendet wird.

  1. Wenn Sie die Rückkehr in die vorbei sind Textfeld von so etwas wie ein UILabel oder UITableViewCell dann die Lookup tritt nur dann auf, wenn Sie zuerst die Eigenschaft festgelegt.

  2. Wenn Sie es in einem drawRect verwenden rufen Sie dann die Suche wird nur passieren, wenn Sie Ihre Ansicht muss sein neu gestrichen, die oft sein könnte, selten oder nie.

  3. Wenn Ihr mit ihm in einem Spiel UI wo der Bildschirm wird für jeden Rahmen neu gezeichnet dann für ein paar UI-Elemente dieser Lookups passieren könnten Hunderte jedes zweite Mal.

Ich würde sagen, dass für so etwas wie # 3 Sie mit Zwischenspeichern der Ergebnisse beginnen soll.

Für die andere sie in der Art und Weise schreiben, die am bequemsten ist und wenn Sie Performance-Probleme in Ihren UI Verwendung Instrumenten, die Ursache zu verengen. Wenn es NSLocalizedString dann optimieren Sie es entsprechend.

Andere Tipps

Micro-Optimierung. Zuerst machen es funktioniert, dann es richtig machen, dann machen Sie es schnell. Und wenn Sie zu Schritt 3 erhalten, führte Shark (oder Instrumente), dann seine Führung folgen.

Ich vermute, dass Sie nehmen Sie nicht zu viel von einer Performance-Einbußen. NSLocalizedString (Schlüssel, Kommentar) ist ein Makro, das zu konvertiert

[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]

Ohne Benchmarking, ich habe keine Ahnung, wie teuer das ist, aber ich vermute, es ist nicht so schlimm. Mein Gefühl ist, dass dies nicht zu einem Leistungsengpass für Sie sein, aber man kann immer Shark oder Instrumenten läuft und sehen Sie selbst, wenn Sie Ihre Anwendung auf dem Gerät ausgeführt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top