2 Stimmen

Verlangsamt eine große Anzahl von Selektoren Objective-C-Programme?

Wenn ich eine große Anzahl (10000+) zusätzlicher Selektoren in einem Objective-C-Programm mit der Laufzeitfunktion sel_registerName registriere, wird mein Programm dadurch verlangsamt? Ohne Berücksichtigung der Zeit, die für die Registrierung dieser Selektoren benötigt wird.

Mit freundlichen Grüßen, Jochen

4voto

bbum Punkte 161596

Es wird Ihre Anwendung nur dann verlangsamen, wenn Sie einen extrem pathologisch benannten Satz von Selektoren erstellen, die sich zufällig alle in einem Bucket im Hash der Selektoren im Objective-C-Methoden-Cache stapeln.

Sehr unwahrscheinlich. Wenn Sie ein Leistungsproblem feststellen, messen Sie es mit Instruments (oder einem anderen Tool) und ermitteln Sie, wo es liegt, bevor Sie versuchen, es zu optimieren.

Die Antwort von rpetrich ist zwar richtig, aber die Menge an RAM pro Selektor ist minimal. Was den Selektor selbst betrifft, so handelt es sich nur um Daten im Wert einer Adresse. Der eigentliche Selektorwert wird normalerweise nicht verwendet. Wenn die Selektoren aus statisch zugewiesenen Zeichenketten bestehen, ist es unwahrscheinlich, dass irgendetwas den Speicher tatsächlich berührt (es sei denn, Ihr Code tut es).

Wenn Sie die Selektornamen dynamisch generieren, werden die Zuweisungen natürlich Speicherplatz beanspruchen.

(Ich bin natürlich sehr neugierig, warum Sie so viele Selektoren erzeugen. Das ist ein ziemlich untypisches Muster!)

1voto

rpetrich Punkte 32030

Nein, aber jeder Selektor müsste im Speicher resident sein und kann nicht abgemeldet werden. Dadurch wird der für den Rest Ihrer Anwendung verfügbare RAM-Speicher reduziert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X