Во-первых, не чувствую себя плохо, что все, если материал не ясно. Это хороший пример того, что сначала кажется сложным, но просто требует времени на самом деле. Это произойдет, прежде чем вы это узнаете :-). Я попытаюсь ответить на каждый из ваших вопросов:
1) Подумайте об этом так: способ, которым UIAlertView работает сейчас, позволяет Apple «делегировать» реализацию alertView: clickedButtonAtIndex: вам. Если это был метод экземпляра UIAlertView, это будет одна и та же реализация для всех. Затем для настройки реализации потребуется подклассификация - зачастую это зависит от шаблона проектирования. Apple имеет тенденцию идти с составом над наследованием в своих рамках, и это пример этого. Вы можете узнать больше об этой концепции: http://en.wikipedia.org/wiki/Composition_over_inheritance
2) Свойство delegate является ссылкой на объект, который реализует методы делегирования, и которые должны использоваться для делегирования этих задач. Странный синтаксис просто означает это - свойство, которое содержит ссылку на объект, который придерживается протокола.
3) Не совсем - делегирование использует протоколы как средство для его реализации. В приведенном выше примере это имя протокола, которому должен соответствовать объект, который может считаться делегатом для этого класса. Именно внутри этого протокола определяются методы, для которых должен реализовываться делегат этого класса. У вас также могут быть дополнительные методы протокола, но это другая тема.
4) Если я правильно понял вопрос, я считаю, что хорошим признаком того, что вы можете пожелать, чтобы делегат был реализован вместо простого добавления методов экземпляра к вашему объекту, заключается в том, что вы считаете, что вам может понадобиться реализация этих методов легко заменяться или меняться. Когда реализация этих методов значительно изменится в зависимости от того, где/как используются функции вашего здания
5) Абсолютно! Objective-C и Swift являются языками программирования, а шаблон делегирования является примером шаблона проектирования. В целом шаблоны проектирования представляют собой хозиональные концепции, которые выходят за пределы вертикалей языков программирования.
6) Я не уверен, что я вас точно понимаю, но я думаю, что в вопросе есть немного недоразумений - метод не вызывается дважды. Метод, объявленный в протоколе делегата, вызывается один раз - обычно из класса, который содержит свойство делегата. Класс призывает делегатов реализовать это свойство через что-то вроде:
[self.delegate someMethodThatMyDelegateImplemented];
Я надеюсь, что это помогло!
Делегирование шаблон проектирования. Он может быть реализован на любом языке. Это не относится к Objective-C. – rmaddy
Делегирование замечательно, и делегаты не должны быть «сильными», они должны быть «слабыми». – quellish
@maddy История предостережения: хотя это верно в 1993 году, были дискуссии о направлении C++ в основном между Cargile и Stroustrup (угадайте, кто выиграл) по двум основным вопросам. 1. Многократная последовательность 2. Делегирование. Cargile хотел, чтобы это был гражданин первого класса C++. Строуступ утверждал, что никогда не видел использования Делегации, которая не была ни игрушкой, ни запутанной, ни трудной для понимания. – zaph