美文网首页
iOS开发之UI(八)

iOS开发之UI(八)

作者: zero点点 | 来源:发表于2016-02-22 21:36 被阅读29次

    1.属性传值

    第一步:在SecondViewController.h中定义一个字符串属性

    @property (copy, nonatomic) NSString *string;
    

    第二步:在点击FirstViewController按钮的方法里面给字符串属性赋值

    SecondViewController *secondVC = [[SecondViewController alloc] init];
    secondVC.string = _textField.text;
    

    第三步:在SecondViewController中使用字符串属性给textField赋值

    _textField.text = _string;

    2.协议传值

    第一步:声明协议

    @protocol SecondViewControllerDelegate <NSObject>
    
    - (void)changeValue:(NSString *)text;
    
    @end
    

    第二步:声明代理人

    @property (assign, nonatomic) id<SecondViewControllerDelegate> delegate;
    

    第三步:执行协议方法

    if (self.delegate != nil && [self.delegate respondsToSelector:@selector(changeValue:)]) {
        [self.delegate changeValue:_textField.text];
    }
    

    第四步:签订协议

    @interface ViewController () <SecondViewControllerDelegate>
    

    第五步:指定代理人

     secondVC.delegate = self;
    

    第六步:实现协议方法

    - (void)changeValue:(NSString *)text {
        _textField.text = text;
    }
    

    3.block传值

    第一步:重定义block

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

    第二步:声明属性

    @property (copy, nonatomic) Block block;
    

    第三步:实现block

    secondVC.block = ^(NSString *text) {
        _blockTextField.text = text;
    };
    

    4.block内存管理

    • 没有使用局部变量的block内存存储在全局区
    • 使用局部变量的block内存存储在栈区
    • 当block变量定义为属性,必须用copy修饰,否则会造成野指针
    • 当不是用block时,需要使用Block_RElease()进行销毁
    • 在非arc下使用__block修饰变量来防止循环引用
    • 在arc下使用__week修饰变量来防止循环引用

    相关文章

      网友评论

          本文标题:iOS开发之UI(八)

          本文链接:https://www.haomeiwen.com/subject/zdybkttx.html