作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很困惑 - 我无法理解委托(delegate)的用途是什么?
默认创建的应用程序委托(delegate)是可以理解的,但在某些情况下我见过这样的东西:
@interface MyClass : UIViewController <UIScrollViewDelegate> {
UIScrollView *scrollView;
UIPageControl *pageControl;
NSMutableArray *viewControllers;
BOOL pageControlUsed;
}
//...
@end
什么是 <UIScrollViewDelegate>
为了?
它是如何工作的以及为什么使用它?
最佳答案
<UIScrollViewDelegate>
表示该类符合 UIScrollViewDelegate
协议(protocol)。
这真正的意思是该类必须实现 UIScrollViewDelegate
中定义的所有必需方法。协议(protocol)。就这么简单。
如果您愿意,您可以使您的类符合多个协议(protocol):
@implementation MyClass : UIViewController <SomeProtocol, SomeOtherProtocol>
使类符合协议(protocol)的目的是 a) 将类型声明为协议(protocol)的一致者,因此您现在可以将此类型分类在 id <SomeProtocol>
下,这对于此类的对象可能属于的委托(delegate)对象来说更好,并且 b) 它告诉编译器不要警告您实现的方法未在头文件中声明,因为您的类符合协议(protocol)。
这是一个例子:
可打印.h
@protocol Printable
- (void) print:(Printer *) printer;
@end
文档.h
#import "Printable.h"
@interface Document : NSObject <Printable> {
//ivars omitted for brevity, there are sure to be many of these :)
}
@end
文档.m
@implementation Document
//probably tons of code here..
#pragma mark Printable methods
- (void) print: (Printer *) printer {
//do awesome print job stuff here...
}
@end
您可以然后拥有多个符合 Printable
的对象协议(protocol),然后可以用作实例变量,例如 PrintJob
对象:
@interface PrintJob : NSObject {
id <Printable> target;
Printer *printer;
}
@property (nonatomic, retain) id <Printable> target;
- (id) initWithPrinter:(Printer *) print;
- (void) start;
@end
@implementation PrintJob
@synthesize target;
- (id) initWithPrinter:(Printer *) print andTarget:(id<Printable>) targ {
if((self = [super init])) {
printer = print;
self.target = targ;
}
return self;
}
- (void) start {
[target print:printer]; //invoke print on the target, which we know conforms to Printable
}
- (void) dealloc {
[target release];
[super dealloc];
}
@end
关于ios - 代表申报困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4363823/
我正在编写一些代码,用于将 Silverlight View 绑定(bind)到 MVP 模式中的演示者。在这种特殊情况下,一遍又一遍地执行此操作是一项非常漫长的练习: 型号: public bool
我是一名优秀的程序员,十分优秀!