In meiner iOS
Anwendung, posten ich eine NSNotification
und fange es in einem meiner UIView
im Haupt-Thread. Ich möchte zusätzliche Informationen zusammen mit der Benachrichtigung weitergeben. Ich benutzte userInfo
Wörterbuch von NSNotification
dafür.Objektparameter in der Methode postNotification von NSNotificationCenter
Schlüssel, Wert, Farbe und Zeit sind lokale Variablen, die den Wert enthalten, den ich übergeben muss. In UIView
I Beobachtern ist Zugabe für diese Meldung und ich bin mit notification.userInfo
diese Daten
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveNotification:) name:@"NotifyValueComputedFromJS" object:nil];
-(void)receiveNotification:(NSNotification *)notification
{
if ([notification.userInfo valueForKey:@"notificationKey"]!=nil && [[notification.userInfo valueForKey:@"notificationKey"] isEqualToString:self.notificationKey] && [notification.userInfo valueForKey:@"notificationValue"]!=nil) {
[self updateLabelWithValue:[notification.userInfo valueForKey:@"notificationValue"]];
}
}
Die Frequenz zu erhalten, in dem diese Mitteilung veröffentlicht wird, ist 4-mal in einer Sekunde. Ich mache einige Animationen auch im Hauptthread. Das Problem, mit dem ich hier konfrontiert bin, ist, dass meine Benutzeroberfläche zurückbleibt. Die Benutzeroberfläche reagiert auf Scroll-Ereignisse oder berührt Ereignisse mit großer Verzögerung (ich hatte sogar eine Verzögerung von 1 bis 2 Sekunden). Nach einigen Recherchen habe ich erfahren, dass NSDictionary
sperrig ist und Lag verursachen wird, wenn es im Hauptfaden verwendet wird. Gibt es eine andere Möglichkeit, wie ich meine Daten über NSNotification weitergeben kann?
Ich habe einen anderen Weg ausprobiert. Ich habe eine benutzerdefinierte NSObject
Klasse erstellt, um die Daten zu speichern, die ich möchte, und ich übergebe es als Objektparameter der postNotification
Methode.
[[NSNotificationCenter defaultCenter] postNotificationName:@"NotifyValueComputedFromJS" object:customDataObject userInfo:nil];
Hier customDataObject
ist eine Instanz meiner benutzerdefinierten NSObject
Klasse. Ich weiß, dass der Parameter der Absender der Benachrichtigung sein soll (normalerweise wird es selbst sein). Ist es ein falscher Ansatz, wenn ich ein benutzerdefiniertes Objekt als Parameter sende?
Danke soviel @ Lytisch. Vielen Dank für die Bereitstellung des Beispielcodes :) –