委托、block、单例

作者: 毛茸茸的我总念成橡皮虾 | 来源:发表于2015-03-22 18:37 被阅读340次

    总是会遇到这四种传值方法,渣渣总结了一下,大神不许耻笑!望指正。

    1、委托(代理)

    1、分清主动类和被动类。例如:A类要让B类来完成某些事情,那么A类就是主动类,B类是被动类,B类是A类的委托。

    2、在主动类.h中设置协议。协议规范名称为:<本类名+Delegate>,且继承自基协议Object。在协议中可以声明一些方法,但不能声明成员变量。并在@interface中设置@property (nonatomic, assign) id<协议名>delegate;

    3、在主动类.m中进行容错处理。

    4、在被动类.m中引入主动类的头文件和协议,设置主动类的对象,并将对象的delegate = self。最后实现协议中的方法。

    2、block

    1、同委托一样,首先分清主动类和被动类。

    2、在主动类.h中的@interface上部 定义block类。typedef + 返回值 + (^block) + (参数类型 参数)。 并在@interface中 @property (nonatomic, copy) block + block的属性名;

    3、在被动类.m中引入主动类的头文件,设置主动类的对象,此时主动类对象就拥有了block的属性 = ^(返回值) + (参数类型 参数) + {代码块};           其中,返回值若是空可以不写。在代码块中实现具体方法。

    4、接下来只需要在主动类中 给之前定义的 block的属性赋参数即可。

    3、单例

    单例就像第三方一样,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/qnfgxttx.html