В моем приложении iOS
я размещаю NSNotification
и поймаю его в одном из моих UIView
в основной теме. Я хочу передать дополнительную информацию вместе с уведомлением. Я использовал userInfo
словарь NSNotification
.Параметр объекта в методе postNotification of NSNotificationCenter
[[NSNotificationCenter defaultCenter] postNotificationName:@"NotifyValueComputedFromJS" object:self userInfo:@{@"notificationKey":key,@"notificationValue":value,@"notificationColor":color,@"notificationTimeStamp":time}];
ключ, значение, цвет и время являются локальными переменными, которые содержат значение, которое необходимо передать. В UIView
я добавляю наблюдатель для этого уведомления, и я использую notification.userInfo
, чтобы получить эти данные
[[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"]];
}
}
Частота, в которой данное уведомление опубликовано в 4 раза в секунду. Я также делаю анимацию в основном потоке. Проблема, с которой я здесь сталкиваюсь, - это мой пользовательский интерфейс. Пользовательский интерфейс будет реагировать на события прокрутки или события касания с огромной задержкой (я столкнулся с задержкой даже от 1 до 2 секунд). После некоторых исследований я узнал, что NSDictionary
громоздкий и вызовет лаг при использовании в основном потоке. Есть ли другой способ передачи моих данных через NSNotification?
Я пробовал другой способ. Я создал собственный класс NSObject
, чтобы сохранить данные, которые я хочу, и передаю его как параметр объекта postNotification
.
[[NSNotificationCenter defaultCenter] postNotificationName:@"NotifyValueComputedFromJS" object:customDataObject userInfo:nil];
Здесь customDataObject
это экземпляр моего пользовательского класса NSObject
. Я знаю, что параметр предназначен для отправителя уведомления (обычно это будет само). Это неправильный подход, если я отправляю пользовательский объект в качестве параметра?
Спасибо так много @ Литическая. Спасибо за предоставление примера кода :) –