美文网首页
委托、block、单例(转载)文/毛茸茸的我总念成橡皮虾(简书作

委托、block、单例(转载)文/毛茸茸的我总念成橡皮虾(简书作

作者: 月上楼阁 | 来源:发表于2016-06-23 08:47 被阅读0次

一、委托(代理)

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;

}


相关文章

网友评论

      本文标题:委托、block、单例(转载)文/毛茸茸的我总念成橡皮虾(简书作

      本文链接:https://www.haomeiwen.com/subject/ptvndttx.html