iOS的四种传值方式

传值有四种方法 :

1. 属性传值
2. 单例传值
3. 代理传值
4. block传值
 
 
一.属性传值    (前-->后)
1. 后面的界面定义一个属性  存放前一个界面传过来的值
   注意:属性定义成字符串还是别的类型 取决于你的需求 
 
2. 后面的界面创建完毕后,为属性赋值(记录需要传递的值)
 
3. 在需要使用值的地方  使用属性记录的值
 
4. 通过 定义属性 达到传值目的的方法 称为属性传值
属性传值一般用于 从前一个界面向后一个界面传值
 
二.单例传值  (万能的传值方式  可以跨多个页面之间进行传值)
 
1.首先定义一个单例  在这个单例中只有一个实例  但是可以有多个属性
 
2. 
 static Single *single=nil;
 +(Single *)shareSingle
 {
    @synchronized(self){
        if (single==nil) {
            single=[[Single alloc] init];
        }
        
    return single;
    }

  

    
3.把要传的值赋值给单例中d的属性

 
注:单例   通常提供一个类方法 获取这个唯一的实例
//但绘制类型  就是这个类的类型 命名以default shared  current standard等开头
单例一个类只有一个实例   单例的对象通常不释放  直到程序退出
 
 
三.代理传值     (后>)
 
1.   后一个界面定义一个协议 并且定义一个属性叫delegate
 
2.  在前一个界面进入后一个界面的瞬间(创建完后一个界面之后,让前一个界面作为后一个界面的delegate)
 
3.  前一个界面实现代理方法
 
4.  后一个界面在合适的机会 让代理 执行代理方法(传的值以参数的形式含在代理方法里)
 
 
四.block传值   (后->前)
 
1.后一个界面声明block属性
 
@property (nonatomic,copy)void (^chuanzhi)(NSString *_str);

  

 
2.在.m中的传值方法里检查block是不是存在
 
if (_chuanzhi) {
        _chuanzhi(_textField.text);
        _chuanzhi=nil;
    }

  

 
3.前一个界面进入后一个界面的方法里实现这个block
 
 [(dVC)后一个界面控制器 setChuanzhi:^(NSString *_str){
        dispatch_async(dispatch_get_main_queue(), ^{
        
            _label.text=_str;
        });
    

    }];

  

转载于:https://www.cnblogs.com/likun123/p/3862362.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值