Gibt es einen signifikanten Unterschied in der Leistung, wenn Sie
aufrufen? %Vor%vs
%Vor%?
Der erste bewirkt einen zusätzlichen Aufruf von objc_msgSend (), der im zweiten Fall nicht notwendig ist.
Es ist unwahrscheinlich, dass der Leistungsunterschied von äußerster Wichtigkeit ist, es sei denn, Sie rufen die Methode so schnell auf, wie Sie es möglicherweise tun können. Zehntausende Male und machen Sie keine nennenswerte Arbeit in testMethod:
.
i.e. Mach dir keine Sorgen, es sei denn, du misst ein tatsächliches Leistungsproblem.
Interessanterweise führt das Ausführen eines Selektors mit einer Verzögerung von 0 dazu, dass diese Methode am Anfang der nächsten Ausführungsschleife der App aufgerufen wird. Sie können dies verwenden, um bestimmte Ereignisse zu verzögern, die häufig auftreten (in Optimierungen der Benutzeroberfläche häufig verwendet werden, wie Bilder, die in einem UIScrollView neu geladen werden)
Nein, es gibt keinen Leistungseinbruch, den ich kenne, und wenn es einen gibt, ist es nicht signifikant.
Es gibt einen großen Unterschied in beiden Methoden. Ich habe versucht, eine Animation von zwei Tasten zu erhalten, die von der rechten Seite kommen und in der Mitte bleiben, aber die zweite Taste kam mit 0,3 Sekunden Verzögerung ... Jetzt der Hauptpunkt kommt hierher ... Ich benutzte eine Animationsmethode für beide 2 Tasten. Jetzt wollte ich, dass, wenn ich auf "Fertig" -Button klicke, dann beide Knöpfe nach links gehen und wieder neue Knöpfe kommen ... Das war in Ordnung bis zum Lesen ...
Nun, als ich die Methode für die Schaltfläche "Finish" schrieb, klickte ich ... Ich führte gerade die Animation der Buttons aus und dann kamen die Buttons .... aber wenn ich die Methode "Above second" verwendete, zB [someObject testMethod:anotherObject];
, dann ist das was passiert Ich konnte die Ausgeh-Animation nicht sehen und es wurde direkt die Animation der Schaltflächen angezeigt ...
Hier kommt tatsächlich die Verwendung der ersten Methode, d.h. [someObject performSelector:@selector(testMethod:) withObject:anotherObject withDelay:delay];
Der Grund, warum ich gefunden habe, ist, wenn ich auf den Finish-Button klicke, läuft die Animation in einem anderen Thread und der andere Code läuft in einem anderen Thread, so dass die Out-Aktion in einem anderen Thread ausgeführt wurde Thread wurde nicht angezeigt ..
Nach der ersten Methode mit Verzögerungszeit der gesamten Animation ... habe ich mein Ziel erreicht .. Also beide Methoden haben ihre eigene Bedeutung ... njoy Programmierung ...
Ich habe einen wichtigen Unterschied bei der Übergabe von Daten an einen anderen View-Controller in prepareForSegue festgestellt.
mit:
[viewController performSelector: @selector (aMethod :) withObject: anObject];
aMethod heißt AFTER viewDidLoad und viewWillAppear des Ziel-ViewControllers.
mit:
[viewController aMethod: anObject];
aMethode heißt BEFORE viewDidLoad und viewWillAppear des Ziels viewController.
Wenn Sie also Daten senden, die für die Einrichtung des Ziel-ViewControllers wichtig sind, verwenden Sie den zweiten Weg.
Für meine Erfahrung gibt es zwei Unterschiede:
Der erste kann afterDelay: (CGFloat) Sekunden hinzufügen, und dies ist der einzige Fall, in dem ich den ersten benutze.
%Vor%Der zweite muss in someObject.h definiert werden. Andernfalls erhalten Sie eine Kompilierungswarnung.
Tags und Links objective-c iphone ios cocoa