zoukankan      html  css  js  c++  java
  • 浅谈Block传值-匿名函数(代码块)

    block传值是从后往前传值---代理也是

    // 使用block时, 不能访问self, 也不能直接访问属性, self.属性, 用self调用方法; 只要这样做了, block都会对其强引用一份, 也就是造成self对象引用计数+1;
        // 如何避免出现循环引用的情况: 1. 在MRC下, 使用__block 定义一个和self同样的指针, 让block弱引用; 2. 在ARC下 使用__weak
        //    __weak typeof(self)weakSelf = self;
        //    __weak DetailViewController *weakSelf = self;
        //    __block DetailViewController *weakSelf = self;
        // typeof(): 运算符; 这句话就是把weakSelf定义成self指向的数据类型(指针类型), 第一个self是规定weakSelf的类型, 第二个self是把weakSelf指向self;

    #warning mark --第一步 定义block的类型属性
    typedef void (^TSET)();
    typedef void (^PassValue)(NSString *);

    // 1. 确定要添加的block属性的数据类型 void (^)()
    // 2. 定义block变量, 在内存修饰时使用copy, 因为block变量存放在栈区, 此时我们这个对象想持有一份, 使用copy就能把栈区的变量拷贝到堆区, 这样block就不会丢失;

    系统开辟的是栈区一般 C语言,我们自己开辟的是堆区自己过来内存

    #warning mark -- 第二步 定义block属性;
    @property (nonatomic,copy)TSET testBlock;
    @property (nonatomic,copy)PassValue passvalue;

    #warning mark -- 释放block
        Block_release(_testBlock);
        Block_release(_passvalue);

    #warning mark -- 第三步push之前完成对block属性的赋值, 也就是确定block内部要做的事情;
        __block typeof (self)weakSelf = self;
        detail.passvalue = ^ (NSString *string) {
            weakSelf.alable.text = string;
        };

    #warning mark -- 第四步block属性的调用
        self.passvalue(self.textField.text);

    梦想不是挂在嘴边炫耀的空气,而是需要认真的实践,等到对的风,我们展翅翱翔;没有风,只要拥有足够强壮的翅膀,我们照样拔地飞行。天空见。
  • 相关阅读:
    ajax
    导入操作
    游标的使用
    多行编辑
    IOS开发之--NSPredicate
    asp.net DataTables
    asp.net 汉字转拼音的车祸现场
    Git 连接细节
    Aspose.Words 操作指北
    码云代码管理插件备忘
  • 原文地址:https://www.cnblogs.com/size/p/5059198.html
Copyright © 2011-2022 走看看