委托
委托是一种设计模式。
当一个事件发生时,委托允许一个对象把消息传递给其他对象。
成为一个框架类的委托:
第一步,声明类采用了类/父类名字后,方括号里类定义中的协议。
- //MyTableViewController.h
- @interface MyTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
- @end
第二步,设置对象作为委托
- //MyTableViewController.m
- [tableView setDelegate:self];
- @end
第三步,实现委托方法
为自定义的类实现委托:
第一步,声明协议方法
- // Superman.h
- #import <Foundation/Foundation.h>
- @protocol SupermanDelegate <NSObject>
- - (void)dodgeBullet;
- - (void)seeThroughThings;
- - (void)fly;
- @optional
- - (void)eat;
- @end
- @interface Superman : NSObject
- // Create a property for the delegate reference
- @property (nonatomic, weak) id <SupermanDelegate> delegate;
- // Define other methods and properties
- @end
第二步,设置委托对象
- // Superman.m
- [self setDelegate:anObject];
第三步,开始发送委托消息
- // Superman.m
- [self.delegate fly];
Blocks
Blocks是添加到C,Objective-C和C++中一个语言级别的特性,它允许你创建不同的代码段,这些
代码段就像值一样可以在方法和函数间传递
。
块是多核程序设计实现的基础。
声明block局部变量:
- returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...};
声明block属性:
- @property (nonatomic, copy) returnType (^blockName)(parameterTypes);
接收block作为一个方法参数:
- - (void)aMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;
在方法调用中将block作为一个参数传递
- [someObject someMethodThatTakesABlock: ^returnType (parameters) {...}];
定义一个block类型:
- typedef returnType (^TypeName)(parameterTypes);
- TypeName blockName = ^returnType(parameters) {...};