Block使用注意事项

作者: 熊妹妹 | 来源:发表于2016-07-06 22:03 被阅读290次

属性

block是一个函数对象,在程序运行中生成。在运行时,block创建在栈(stack)上,和其他分配在栈上的对象一样,离开就不存在了。所以block作为对象属性时,需要声明为copy。

@property (nonatomic, copy) void(^block)();

__weak

在block内部,引用block持有者时需要用__weak来修饰,为了防止循环引用。

一般__weak__strong是成对出现的,为了保证在block内执行的时候,如果weak的对象被释放了但在block内不会立即释放,保证能顺利执行完block内的代码。

__weak typeof(self) wself = self;

void(^testBlock)() = ^(){
    __strong typeof(wself) sself = wself;
}; 

这里wself在block内外指向同一对象但内存地址不同,因为block在捕获了wself时同对它进行拷贝。

__block

在block内需要修改某些对象时,需要标记为__block
因为没有__block标记的变量,其值会被复制一份到block私有内存区;有__block标记的变量,其地址会被记录在block私有内存区.
所以没用__block修饰的变量在block外值改变了,再执行block时内部该变量的值不会变化。

声明

习惯用type声明block,但有的时候为了解耦还是直接写来得方便。举几个各种场景的例子:

- (NSString *)testA:(NSString * (^)(NSString *s))block {
    NSString * (^blockA)(NSString *) = ^(NSString *paramA){
        NSLog(@"%@",paramA);
        return paramA;
    };
    blockA(@"blockA");

    return block(@"test");
}

- (void)testB:(void (^)(void))block {
    void (^blockB)(void) = ^{NSLog(@"B");};
    blockB();
    
    return block();
}

相关文章

  • OC - Block

    导读: 一、Block是什么 二、Block的特点和作用 三、Block的声明、定义及注意事项 四、如何使用Blo...

  • iOS之轻松上手block(下)

    导语 在上一篇文章《iOS之轻松上手block(上)》中,笔者已经讲述了block的使用与注意事项,此文继续讲解b...

  • Block使用注意事项

    block(块)的本质是什么? 在本质上是一个指向结构体的指针,能将函数作为变量、参数来传递。 block通俗点儿...

  • Block使用注意事项

    属性 block是一个函数对象,在程序运行中生成。在运行时,block创建在栈(stack)上,和其他分配在栈上的...

  • Block注意事项

    1.Block注意事项 在block内部可以访问block外部的变量 block内部也可以定义和block外部的同...

  • #define Weakself(weakSelf) __we

    // 不知道这行代码的使用场景的同学你该去自习看看ARC的注意事项和Block的使用了 // 1、__weak _...

  • ios block使用

    iOS Block的使用一 .最简单的block使用******使用block的三个步骤:1.定义block变量 ...

  • Block

    常用写法: OC中: Swift中: 注意事项: block默认存储在栈中,如果对block进行copy操作,bl...

  • 使用block的小注意事项

    本文要点:使用block导致循环引用的问题block与局部变量问题 什么是block block是一个数据类型, ...

  • iOS Block使用注意

    block本质是两个结构体,使用block使代码简单易读。使用Block注意: 1、block内部使用外部指针,会...

网友评论

    本文标题:Block使用注意事项

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