iOS 单例模式设计模式

委托、block、单例

2015-03-22  本文已影响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;

}


上一篇下一篇

猜你喜欢

热点阅读