Я только начинаю разработку IOS, но имею несколько лет разработчика ASP.net через С#. Честно говоря, мне никогда не приходилось действительно понимать делегатов/событий и т.д., Я знаю, что я использую их при программировании web.forms, но многие функции позаботятся об этой структуре, за кулисами.
Итак, теперь, когда я развиваюсь в IOS, я вынужден попытаться понять, как они функционируют (я предполагаю, что теория делегатов/событий одинакова на разных языках, может быть, я ошибаюсь). Во всяком случае, следующая строка кода в IOS:
if ([self.delegate respondsToSelector:@selector(startImporting:)])
{
[self.delegate startImporting:self];
}
Я прав, думая, что в псевдокоде это означает что-то по строкам:
Если метод/класс, вызывающий этот метод, имеет в нем метод, называемый "startImporting", тогда вызовите метод "startImporting" в вызывающем классе.
Надеюсь, что это ясно. Если это так, то это будет по существу тем же самым, что и статический метод в С#, который вы могли бы вызвать с помощью чего-то вроде:
myImportClass.startImporting();
Предположительно нет, или как это будет сделано. Итак, я пропущу всю точку зрения делегатов, их преимущества и т.д.? Я читал, что они делали снова и снова, и в то время как это имеет смысл, он никогда не нажимает, я никогда (в веб-формах так или иначе) действительно видел выгоду от их использования.
Это становится все более важным, поскольку я перехожу к использованию лямбда-выражений в .net, и они тесно связаны с делегатами на С#, поэтому, когда я могу только начать их использовать, я бы предпочел знать, почему и что польза от делегатов на самом деле есть.