Делегаты не много работают, не много кода и, как правило, являются наиболее подходящим решением.На мой взгляд, они не сложные и не беспорядочные.
Пять строк кода в интерфейсе ребенка.До @interface:
@protocol MyUsefulDelegate <NSObject>
- (void)infoReturned:(id)objectReturned;
@end
Внутри @interface:
id <MyUsefulDelegate> muDelegate;
После @ inteface's @end:
@property (assign) id <MyUsefulDelegate> muDelegate;
Одна строка кода в реализации ребенка:
[[self muDelegate] infoReturned:yourReturnObject];
Одно дополнение к существующей строке кода в интерфейсе родителя:
@interface YourParentViewController : UIViewController <MyUsefulDelegate>
Три строки кода в реализации родителя.Где-то перед тем, как вызвать ребенка:
[childVC setMuDelegate:self];
В любом месте реализации:
- (void)infoReturned:(id)objectReturned {
// Do something with the returned value here
}
Всего девять строк кода, одна из которых является просто дополнением к существующей строкекод, один из которых представляет собой закрывающую фигурную скобку.
Это не так просто, как, скажем, возвращать значение из локального метода, но как только вы привыкнете к шаблону, он становится очень простым и имеетСила позволения вам делать все виды более сложных вещей.