02-单例-通知-KVO-Block-代理

原创 2015年07月08日 18:48:39
一、单例:

1.定义单例类
@interface single : NSObject
@property (nonatomic, copy) NSString *name;
+ (id)shareInstance;
@end

#import "single.h"
static single *instance = nil;
@implementation single

+ (
id)shareInstance
{
   
if (instance == nil) {
       
       
instance = [[single alloc] init];
       
    }
   
return instance;
}

@end

2.实现传值
传值者:
 single *s = [single shareInstance];
    s.name = _lable.text;

接收者:

//视图将要显示时调用
- (void)viewWillAppear:(BOOL)animated
{
   
single *s1 = [single shareInstance];
   
lable.text = s1.name;
}






二、通知:

1.发送通知
 //取得输入的数据
    NSString *text = _textFiekd.text;
    NSDictionary *dic = @{
                         
@"key":text
                          };
    //发送通知1
  [[NSNotificationCenter defaultCenter] postNotificationName:@"changeValue" object:self userInfo:dic];
  [self dismissViewControllerAnimated:YES completion:nil];

//发送通知2
[[NSNotificationCenter defaultCenter] postNotificationName:@"tapAction" object:self];

2.接受通知
//接收通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeAction:) name:@"changeValue" object:nil];
 
- (void)changeAction:(NSNotification *)notification {
    //取得传递的数据
   
NSDictionary *dic = notification.userInfo;
    _label.text = dic[@"key"];
}

//接受通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tapAction) name:@"tapAction" object:nil];

- (void)tapAction
{
    _isHidden = !_isHidden;
    self.navigationController.navigationBar.hidden = _isHidden;
    [[UIApplication sharedApplication] setStatusBarHidden:_isHidden];
}

//删除通知
- (void)dealloc
{
    [[
NSNotificationCenter defaultCenter] removeObserver:self];
}







三、KVO观察者模式
1.观察者
接收值
 _secondCtrl = [[SecondViewController alloc] init];
  
//监听secondCtrl的属性值变化
[_secondCtrl addObserver:self forKeyPath:@"text" options:NSKeyValueObservingOptionNew context:nil];
  

//接收到消息后触发的方法
- (
void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(
id)object
                        change:(
NSDictionary *)change
                       context:(
void *)context {

   
NSLog(@"change:%@",change);
   
   
NSString *text = [change objectForKey:@"new"];
   
_label.text = text;
   
}
删除观察者
- (void)dealloc
{
    [_secondCtrl removeObserver:self forKeyPath:@"happyValue" context:NULL];
}



2.被观察者

定义观察属性
@property(nonatomic, copy)NSString *text;

赋值
self.text = _textFiekd.text;






四、Block
1.要传值的一边定义block

typedef  void(^MyBlock)(NSString *text);


@property(nonatomic, copy)MyBlock block;
@property (weak, nonatomic) IBOutlet UITextField *textFiekd;

if(_block != nil){
    _block(_textFiekd.text);
}

2.接收值的一边

- (void)viewWillAppear:(BOOL)animated {

    [
super viewWillAppear:animated];
   
    secondCtrl.block = ^(NSString *text) {
   
        _label.text = text;
    };
}
五、代理

要传值的一边如下配置:
@protocol sendData <NSObject>

- (
void)sendData:(NSString *)text;

@end

@property(nonatomic, assign)id<sendData> delegate;
@property (weak, nonatomic) IBOutlet UITextField *textFiekd;

- (
IBAction)dismissAction:(id)sender {
  
   if (self.delegate respondsToSelector:@selector(sendData:)) {
          [_delegate sendData:_textFiekd.text];
    }
    [
self dismissViewControllerAnimated:YES completion:nil];
}

接收值的一边如下配置:

@interface ViewController ()<sendData>
@property (weak, nonatomic) IBOutlet UILabel *label;


- (IBAction)presentAction:(id)sender {
   
SecondViewController *secondCtrl = [[SecondViewController alloc] init];
   
    secondCtrl.delegate =
self;
   
    [
self presentViewController:secondCtrl animated:YES completion:nil];

}

- (
void)sendData:(NSString *)text {

   
_label.text = text;
   
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

数据传递的几种方式:代理,通知,block,单例

数据回调之代理: 在需要传送数据出去的类中设置代理:设置代理协议,代理属性(为id类型,weak修饰),定义一个代理方法,这这个类中判断是否执行了这个代理方法,用( if ([self.de...
  • yoyo_lzj
  • yoyo_lzj
  • 2016年01月10日 14:29
  • 369

[单例、代理 & 通知]

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 1、单例-share...
  • ab20514
  • ab20514
  • 2015年11月11日 23:26
  • 223

Objective-C学习-单例以及通知中心(NotificationCenter)

单例       单例是什么呢,简单的来说就是一块全局唯一的内存,通俗的来讲就是一块全局共用的内存,那么单例有什么用呢,楼主表示基本上自己写过的单例大多数都是用来传值的或者打包成一个功能性的类,当然方...
  • RunIntoLove
  • RunIntoLove
  • 2015年11月03日 15:01
  • 997

iOS开发中单例设计模式、通知中心的使用

iOS开发中单例设计模式、通知中心的使用
  • Yj_sail
  • Yj_sail
  • 2016年08月04日 10:52
  • 643

设计模式(单例、代理、工厂)

第一种(懒汉,线程不安全):   Java代码  收藏代码 public class Singleton {       private static Singleton instance; ...
  • PineApple0
  • PineApple0
  • 2014年11月05日 19:02
  • 2857

iOS 之单例 代理 通知

1> Singleton.h 声明方法 //共享单例,便于其他类访问 + (instancetype)sharedSingleton; 2> Singleton.m 实现方法 /**  ...
  • xiangrikui524
  • xiangrikui524
  • 2017年01月16日 11:47
  • 87

iOS数据回调三大利器——代理、通知与Block

iOS数据回调三大利器——代理、通知与Block引子:在实际开发中我们经常遇到需要跨方法,甚至跨文件访问数据或传输信息,跨方法是比较简单的,只要我们声明一个全局变量,并为其赋值,就可以在同一个文件中的...
  • qq_34101611
  • qq_34101611
  • 2016年04月04日 00:45
  • 819

iOS 开发中的消息机制-代理、通知、block

http://blog.csdn.net/italianshen
  • italianshen
  • italianshen
  • 2016年05月03日 22:45
  • 692

iOS中 block 代理 通知的区别

1.代理      代理就是来解决类耦合性和封装变化点的,多人开发中,防止一个类改变导致别的地方也被动改变,代理通俗的说其实就是set赋值,用对象地址调用对象的方法,给对象赋值。代理是委托方声明...
  • gavin__fan
  • gavin__fan
  • 2016年06月27日 20:33
  • 3273

代理、nsnotification和kvo的区别和用法

个人在网上浏览一些文档发现蛮有意思的,现转载下来供大家学习查看。1.效率肯定是delegate比nsnotification高。 2. delegate方法比notification更加直接。 ...
  • linfengwenyou
  • linfengwenyou
  • 2016年01月07日 15:35
  • 608
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:02-单例-通知-KVO-Block-代理
举报原因:
原因补充:

(最多只允许输入30个字)