arc 中block知多少(2)?

作者: LeeDev | 来源:发表于2016-07-06 11:06 被阅读81次

1.参数block

当做参数的block ,如果参数没有引起到其他的值的话,是全局的block,但当引用到了值的话,不管是self 还是weakSelf ,都是栈block。这要和前面的中写的 《arc 中block 知多少?》的一文中有所区别

2.demo

//
//  ViewController.m
//  当做参数的局部变量的block
//
//  Created by apple on 16/7/6.
//  Copyright © 2016年 李重阳. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic,strong) void(^block)();
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    NSArray * arr = @[@"1",@"2"];
    __weak typeof(self) weakSelf = self;
    
    [self addBlock:^(int a) {//__NSGlobalBlock__
        
        NSLog(@"block0 = %d",a);
    }];
    
    [self addBlock:^(int a) {//__NSStackBlock__
        
        NSLog(@"block2(%@) = %d",weakSelf,a);
    }];
    
    [self addBlock:^(int a) {//__NSStackBlock__
        
        NSLog(@"block3(%@) = %d",self,a);
    }];
    
    NSLog(@"selfblock = %@",self.block);//__NSMallocBlock__
}

- (void)addBlock:(void(^)(int))block {
    
    self.block = block;
    block(1);
    NSLog(@"block = %@",block);
    
}

@end

3. 总结
block 当做参数的时候,如果只是在当前函数中调用,可以不用copy 或者strong 拷贝到堆中例如 在- (void)addBlock:(void(^)(int))block,只是在当前的函数中调用,如果这个block 在其他地方调用就必须 @property (nonatomic,strong) void(^block)() 来指向当前的block ,拷贝到堆中,防止提前释放。

相关文章

  • arc 中block知多少(2)?

    1.参数block 当做参数的block ,如果参数没有引起到其他的值的话,是全局的block,但当引用到了值的话...

  • arc 中block 知多少?

    **1.block 分配的地址 **block 大概可以分配到3个地方NSGlobalBlock(全局的)、NS...

  • __weak & __block

    1.__block:可以在ARC、MRC下使用 __weak:只能在ARC下使用 2.__block:可以修饰对象...

  • block 在ARC下对变量的影响

    在ARC :Block访问外部的变量 ARC环境下,当单纯定义一个block存储在全局区 ARC环境下,block...

  • 关于object—C中block自己的浅解

    1.ARC状态下用copy,这样使block处于栈中,不会意外被释放。 2.block中要修改局部变量要用__bl...

  • Block 由浅入深

    Block是对象。 如何判断mrc,arc 1.delloc 能否调用super,能mrc,不能arc。 2.re...

  • ARC中的block

    三大类型 NSGlobalBlock: 位于内存静态全局区。没有调用任何变量或者调用的为全局变量、静态变量。你可以...

  • 面试题整理

    3. __block在arc和非arc下含义一样吗? 是不一样的。 在MRC中block variable在blo...

  • Blcok相关经典面试题

    题目:事例分析Block在ARC和MRC情况下的使用。 ARC与MRC在Xcode中的切换:arc-->mrc 更...

  • #1-对于block的理解,mrc和arc的区别

    block在ARC和MRC中的声明引用有些区别: copy使栈中的block转移到堆中,并对block会引用的对象...

网友评论

    本文标题:arc 中block知多少(2)?

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