Вы можете сделать это, используя IBOutletCollection. Преимущество этого подхода заключается в том, что вы можете связывать объекты в Интерфейсном Разработчике. Недостатком является то, что вы не можете напрямую ссылаться на IBActions (например, UIControl). Вот чистая реализация с использованием протокола:
ObserverProtocol.h
@protocol ObserverProtocol <NSObject>
- (void)observedObjectChanged:(id)sender;
@end
myobject.h
@interface MyObject : NSObject
{
@private
IBOutletCollection(id<ObserverProtocol>) NSArray *observers;
}
- (void)objectChanged;
MyObject.m
@implementation MyObject
- (void)objectChanged
{
for (id<ObserverProtocol> observer in observers)
{
if ([observer respondsToSelector:@selector(observedObjectChanged:)])
{
[observer observedObjectChanged:self];
}
}
}
@end
Тогда вам просто нужно реализовать ObserverProtocol в классах, которые вы хотите наблюдать за событием (и, конечно, выполнить связывание в Интерфейсном Разработчике).