一、委托(代理)
1.首先分清主动类和被动类,例如:A类要让B类来完成某些事情,那么A类就是主动类,B类是被动类,B类是A类的委托。
2、在主动类.h中设置协议。协议规范名称为:<本类名+Delegate>,且继承自基协议Object。在协议中可以声明一些方法,但不能声明成员变量。并在@interface中设置@property (nonatomic, assign) id<协议名>delegate;
3、在主动类.m中进行容错处理。
4、在被动类.m中引入主动类的头文件和协议,设置主动类的对象,并将对象的delegate = self。最后实现协议中的方法。
二、block
1、同委托一样,首先分清主动类和被动类。
2、在主动类.h中的@interface上部 定义block类。typedef + 返回值 + (^block) + (参数类型 参数)。 并在@interface中 @property (nonatomic, copy) block + block的属性名;
3、在被动类.m中引入主动类的头文件,设置主动类的对象,此时主动类对象就拥有了block的属性 = ^(返回值) + (参数类型 参数) + {代码块}; 其中,返回值若是空可以不写。在代码块中实现具体方法。
4、接下来只需要在主动类中 给之前定义的 block的属性赋参数即可
三、单例
单例就像第三方一样,A要把值传给B,那么A先把值传给了C(其中C是永恒不变的),然后B再从C中取出值,这样就实现了A向B的传值。
1、分清主动类和被动类
2、新建单例类,声明(同时 声明一个id类型的属性object)+实现(实现有两种方法)。
3、主动类.m中设置单例的对象,先调用单例的share方法。此时单例对象就有了属性object = 要传的值。(single.object)
4、被动类.m中设置单例的对象,先调用单例的share方法。再将single.object赋给被动类需要得到值的对象。
单例的两种写法:
1、
static AccountManager *DefaultManager = nil;
+ (AccountManager *) defaultManager {
if (!DefaultManager) {
DefaultManager = [[self allocWithZone:NULL] init];
}
return DefaultManager;
}
2、
+ (AccountManager *) sharedManager
{
static AccountManager *sharedAccountManagerInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedAccountManagerInstance = [[self alloc] init];
});
return sharedAccountManagerInstance;
}