Ios 理解委托和协议之间的关系
我知道这里有很多类似的问题,但我仍然需要澄清这个概念 首先,让我首先说,我确实理解什么是协议以及如何使用它们,我在理解方面遇到的问题是委托。我知道委托是指程序中的一个对象代表另一个对象,听起来很简单,但很难看到整个画面 1-委派只是让编译器知道在哪里查找将操作对象的代码(UITableView等)的一种方式吗 2-授权和协议是否协同工作 3-委托是否可以在没有协议的情况下存在?如果是,你能给我举个例子吗 4-当我们声明一个协议并且一个类符合它时,我们能说这个符合协议的类是在委托协议的行为吗 以上有多少是正确的 非常感谢 1-委派只是让编译器知道在哪里查找将操作对象的代码(UITableView等)的一种方式吗 不,委派是一种设计模式。这只是一个概念 2-授权和协议是否协同工作 是的,他们合作得很好,这可能是为您的代表使用协议的最佳实践 3-委托是否可以在没有协议的情况下存在?如果是,你能给我举个例子吗 是的,你可以。委托的概念就是去除对象的智能,并将其放入委托中。例如,Ios 理解委托和协议之间的关系,ios,objective-c,swift,delegates,protocols,Ios,Objective C,Swift,Delegates,Protocols,我知道这里有很多类似的问题,但我仍然需要澄清这个概念 首先,让我首先说,我确实理解什么是协议以及如何使用它们,我在理解方面遇到的问题是委托。我知道委托是指程序中的一个对象代表另一个对象,听起来很简单,但很难看到整个画面 1-委派只是让编译器知道在哪里查找将操作对象的代码(UITableView等)的一种方式吗 2-授权和协议是否协同工作 3-委托是否可以在没有协议的情况下存在?如果是,你能给我举个例子吗 4-当我们声明一个协议并且一个类符合它时,我们能说这个符合协议的类是在委托协议的行为吗 以上
UITableView
不知道它有多少行,也不知道单击单元格时要做什么,所以它会向其委托请求。
但委托仍然是另一个对象
如果它实现一个特定的协议会更好,但是你可以不用它
例如:
我有一个MyView,它是MyCustomViewController
的子视图
MyCustomViewController.h
- (void)myViewIsTouched;
@property (nonatomic, weak) MyCustomViewController *delegate
MyView.h
- (void)myViewIsTouched;
@property (nonatomic, weak) MyCustomViewController *delegate
MyView.m
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.delegate myViewIsTouched];
}
本例中没有协议,但它仍然是一个委托。
(更好的方法仍然是使用协议,而不是在.h
中声明方法)
4-当我们声明一个协议并且一个类符合它时,我们能说这个符合协议的类是在委托协议的行为吗
我不确定你在说什么。但是协议和委托不是一回事。实现协议的对象并不意味着它是委托
1-委派只是让编译器知道在哪里查找将操作对象的代码(UITableView等)的一种方式吗
不,委派是一种设计模式。这只是一个概念
2-授权和协议是否协同工作
是的,他们合作得很好,这可能是为您的代表使用协议的最佳实践
3-委托是否可以在没有协议的情况下存在?如果是,你能给我举个例子吗
是的,你可以。委托的概念就是去除对象的智能,并将其放入委托中。例如,UITableView
不知道它有多少行,也不知道单击单元格时要做什么,所以它会向其委托请求。
但委托仍然是另一个对象
如果它实现一个特定的协议会更好,但是你可以不用它
例如:
我有一个MyView,它是MyCustomViewController
的子视图
MyCustomViewController.h
- (void)myViewIsTouched;
@property (nonatomic, weak) MyCustomViewController *delegate
MyView.h
- (void)myViewIsTouched;
@property (nonatomic, weak) MyCustomViewController *delegate
MyView.m
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.delegate myViewIsTouched];
}
本例中没有协议,但它仍然是一个委托。
(更好的方法仍然是使用协议,而不是在.h
中声明方法)
4-当我们声明一个协议并且一个类符合它时,我们能说这个符合协议的类是在委托协议的行为吗
我不确定你在说什么。但是协议和委托不是一回事。实现协议的对象并不意味着它是委托
Foo
需要了解Bar
,反之亦然。使用协议允许您使用任何类,因此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
Foo
需要了解Bar
,反之亦然。使用协议允许您使用任何类,因此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