免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2565 | 回复: 1
打印 上一主题 下一主题

[iOS] iOS 之单例,代理,通知,KVO,Block全能解析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-08-12 14:46 |只看该作者 |倒序浏览
  1. //单例
  2. //.h
  3. + (Instannce *)shareInstance;
  4. //.m
  5. static Instannce *instance = nil;
  6. @implementation Instannce
  7. //定义一个创建单例对象的方法
  8. + (Instannce *)shareInstance {
  9.     if (instance == nil) {
  10.         instance = [[Instannce alloc] init];
  11.     }   
  12.     return instance;
  13. }
  14. //使用alloc的时候调用的方法instancetype
  15. + (id)allocWithZone:(struct _NSZone *)zone {
  16.     if (instance == nil) {
  17.         instance = [super allocWithZone:zone];
  18.     }  
  19.     return instance;
  20. }
  21. - (id)copy {
  22.     return self;
  23. }
  24. - (id)retain {
  25.     return self;
  26. }
  27. - (NSUInteger)retainCount {
  28.     //返回无符号最大值
  29.     return UINT_MAX;
  30. }
  31. - (oneway void)release {
  32.     //什么也不做
  33. }

  34. //代理
  35. //.h
  36. @protocol GetMessageProtocol <NSObject >
  37. - (void)getNum:(NSString *)num withPassWord:(NSString *)pass;
  38. @end
  39. @property (nonatomic,assign) id<GetMessageProtocol> delegate;
  40. //.m
  41. if ([self.delegate respondsToSelector:@selector(getNum:withPassWord:)]) {
  42.         [self.delegate getNum:num.text withPassWord:passWord.text];
  43.     }
  44. #pragma mark - GetMessageProtocol
  45. - (void)getNum:(NSString *)num withPassWord:(NSString *)pass {
  46.    
  47. }
  48. registerCtrl.delegate = self;

  49. //通知 注意postNotificationName 必须一致
  50.     [[NSNotificationCenter defaultCenter] postNotificationName:NotificationName object:self userInfo:dic];  //dic存放在userinfo中   dic中存放要传过去的值是个字典
  51. //接受通知
  52.     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeAction:) name:NotificationName object:nil];

  53. //KVO监听
  54. /*KVO观察者方法
  55. keyPath: 监听的属性名
  56. object: 被观察的对象
  57. change: 属性值
  58. context: 上下设备文
  59. */
  60.     [registerCtrl addObserver:self forKeyPath:@"属性名称1" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
  61.     [registerCtrl addObserver:self forKeyPath:@"属性名称2" options:NSKeyValueObservingOptionNew context:nil];
  62. //触发的事件
  63. - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
  64.     //object的值是registerCtrl
  65.     if ([keyPath isEqualToString:@"属性名称1"]) {
  66.       
  67.     }else if ([keyPath isEqualToString:@"属性名称2"]) {
  68.         
  69.     }  
  70. }
  71. //.h
  72. @property (nonatomic, copy) NSString *属性名称1;
  73. @property (nonatomic, copy) NSString *属性名称2;
  74. //.m   必须通过setter方法改变值或者KVC

  75. //KVO方式
  76. //触发的事件
  77. [indexCollectionView addObserver:self forKeyPath:@"属性名称" options:NSKeyValueObservingOptionNew context:nil];
  78.         [posterCollectionView addObserver:self forKeyPath:@"pathIndex" options:NSKeyValueObservingOptionNew context:nil];
  79. - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
  80.     //得到改变后的新值
  81.     NSInteger index = [[change objectForKey:@"new"] integerValue];

  82.     }
  83. }

  84. //Block  block的返回值  block的名称    block的参数
  85.     typedef void(^SucccessBlock)(NSString *); //Block的定义
  86. @property(nonatomic,copy)SucccessBlock loginBlock;  //block的声明  要用copy防止block的循环引用
  87. _freindBlcok(friends); block的调用
  88. [[MyXMPPManager shareManager] getFreind:^(NSArray *freinds) {}   //block的赋值 实现
复制代码

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2015-08-13 20:30 |只看该作者
IOS人代码还是比较难读懂。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP