зарегистрировать класс в цель c - PullRequest
0 голосов
/ 26 февраля 2012

Допустим, у меня есть classA, который является классом аудио, который многократно дискретизирует аудиовход. каждый раз, когда class A получает новые данные (это может происходить много раз в секунду), он должен сообщить другому классу, который classB.

Теперь я мог бы просто создать экземпляр class B в classA и вызвать B, когда поступят новые данные, но это не модульное программное обеспечение.

Я хочу, чтобы classA был "слепым" по отношению к внешней стороне, и просто добавил его в каждый проект, и имел бы еще один classB, который будет register ему каким-то образом, поэтому, когда у А есть что-то новое, В будет знать об этом, (без вызова A B!)

как это правильно сделано в цели c?

Большое спасибо.

Ответы [ 3 ]

5 голосов
/ 26 февраля 2012

Звучит так, как будто вы хотите реализовать Шаблон наблюдателя

3 голосов
/ 26 февраля 2012

Вы можете отправить уведомление в ClassA и зарегистрировать для этого уведомления в других классах (а именно ClassB).

Вот как выможет сделать это:

ClassA):

[[NSNotificationCenter defaultCenter]
 postNotificationName:@"noteName" object:self];

ClassB):

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(doSomething:)
name:@"noteName" object:nil];

Всякий раз, когда экземпляр ClassA сообщенийновое уведомление, другие экземпляры, которые зарегистрировали к этому уведомлению, будут проинформированы (мгновенно).В этом случае ClassB будет выполнять doSomething:(NSNotification *)note.


[Редактировать]

Вы можете опубликовать это уведомление своим методом установки (setVar:(NSString*)newVar).

Если вы хотите что-то передать, используйте вариант postNotificationName:object:userInfo:.userInfo - это NSDictionary, и вы можете передать в него все, что захотите.например:

NSDictionary* dic = [NSDictionary dictionaryWithObjectsAndKeys:var, @"variable", nil];
[[NSNotificationCenter defaultCenter]
postNotificationName:@"noteName" object:self userInfo:dic];

сейчас, отредактируйте ваш doSomething: метод:

-(void)doSomething:(NSNotification*)note {
    if ([[note name] isEqualToString:@"noteName"]) {
        NSLog(@"%@", [note userInfo]);
    }
}

Дополнительная информация: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Notifications/Introduction/introNotifications.html

https://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/Notification.html

https://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/MacOSXNotifcationOv/Introduction/Introduction.html

2 голосов
/ 26 февраля 2012

Как предложил ennuikiller, простой способ реализовать шаблон наблюдателя в obj-c - это использовать класс NSNotificationCenter. Для дальнейшей информации см. Ссылку на класс .

Редактировать

Другим способом является использование KVO (Наблюдение за ключевыми значениями). Это сложнее, но имеет лучшие показатели по сравнению с первым. Для простого объяснения см. блог Джеффа Ламарша и KVO Reference .

Надеюсь, это поможет.

...