理解授权和协议之间的关系

Understanding the Relation Between Delegation and Protocols

我知道这里有很多类似的问题,但我仍然需要澄清一下这个概念。

首先让我先说我确实了解协议是什么以及如何使用它们,但我在理解方面遇到的问题是委派。我理解委托是程序中的一个对象代表另一个对象,听起来很简单但很难看清全貌。

1- 委托是否只是让编译器知道在哪里寻找将要操作对象(UITableView 等)的代码的一种方式?

2- 授权和协议是否协同工作?

3- 授权可以没有协议吗?如果是,你能给我举个例子吗?

4- 当我们声明一个协议并且一个 class 符合它时,我们可以说这个符合协议的 class 是对协议行为的委托吗?

以上有多少是正确的?

非常感谢

1- Is delegation just a way to let the compiler know where to look for the code that will be manipulating the object (UITableView etc.)?

不,委托是一种设计模式。这只是一个概念。

2- Do delegation and protocols work together?

是的,它们可以很好地协同工作,最好为您的委托使用协议。

3- Can delegation exist without protocols? If yes, can you show me an example.

是的,你可以。委托概念只是删除对象的智能并将其放入委托中。例如,UITableView 不知道它有多少行,或者当一个单元格被点击时要做什么,所以它询问它的委托。 但是委托仍然是另一个对象。

如果它实现了一个特定的协议就更好了,但你可以不实现它。

例如:

我有一个 MyView,它是 MyCustomViewController 的子视图。

MyCustomViewController.h

- (void)myViewIsTouched;

MyView.h

@property (nonatomic, weak) MyCustomViewController *delegate

MyView.m

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.delegate myViewIsTouched];
}

这个例子中没有协议,但它仍然是一个委托。 (更好的方法仍然是使用协议而不是在 .h 中声明方法)

4- When we declare a protocol and a class conforms to it, can we say that this class conforming to the protocol is delegating on behave of the protocol?

我不确定在说什么。但是协议和委托不是一回事。实现协议的对象并不意味着它是委托。

  1. Delegation 允许对象能够根据应用程序其他部分的变化来改变它们的外观/状态。设置一个 delegate 属性 对象将允许编译器做一些 在构建时检查。

  2. 授权通常是通过使用协议来实现的,因为它允许 委托对象是任何 class 而不是 class 的子 class 具有特定的行为。

  3. 是的,但这会导致您的 class 变得紧密耦合,因为 Foo 需要了解 Bar,反之亦然。使用协议允许您使用任何 class,因此 id 属性,导致松耦合系统。

示例:

@class Foo;
@interface Bar : NSObject
- (void)respondToSomeAction:(Foo *)obj;
@end

@implementation Bar 
- (void)respondToSomeAction:(Foo *)obj {
   NSLog("responding to %@",obj);
}
@end

@interface Foo : NSObject 
@property (nonatomic, weak) Bar *delegate
@end

@implementation Foo
- (void)someActionTriggered {
    [self.delegate respondToSomeAction:self]
}
@end
  1. 当 class 遵守协议时,class 被迫采用协议的行为(实现方法)。它只会成为 delegate 如果它被赋予一些任务代表另一个 class,例如提供 table.
  2. 中的行数