美文网首页
委托、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