理解授权和协议之间的关系
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?
我不确定在说什么。但是协议和委托不是一回事。实现协议的对象并不意味着它是委托。
Delegation 允许对象能够根据应用程序其他部分的变化来改变它们的外观/状态。设置一个
delegate
属性 对象将允许编译器做一些
在构建时检查。
授权通常是通过使用协议来实现的,因为它允许
委托对象是任何 class 而不是 class 的子 class
具有特定的行为。
是的,但这会导致您的 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
- 当 class 遵守协议时,class 被迫采用协议的行为(实现方法)。它只会成为 delegate 如果它被赋予一些任务代表另一个 class,例如提供 table.
中的行数
我知道这里有很多类似的问题,但我仍然需要澄清一下这个概念。
首先让我先说我确实了解协议是什么以及如何使用它们,但我在理解方面遇到的问题是委派。我理解委托是程序中的一个对象代表另一个对象,听起来很简单但很难看清全貌。
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?
我不确定在说什么。但是协议和委托不是一回事。实现协议的对象并不意味着它是委托。
Delegation 允许对象能够根据应用程序其他部分的变化来改变它们的外观/状态。设置一个
delegate
属性 对象将允许编译器做一些 在构建时检查。授权通常是通过使用协议来实现的,因为它允许 委托对象是任何 class 而不是 class 的子 class 具有特定的行为。
是的,但这会导致您的 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
- 当 class 遵守协议时,class 被迫采用协议的行为(实现方法)。它只会成为 delegate 如果它被赋予一些任务代表另一个 class,例如提供 table. 中的行数