iOS 快语句(block)的内存浅析

一, 简介

 

    // 默认情况下,block是在栈中,随时可能被回收

    void (^hgBlock)() = ^{

        NSLog(@"一个简单的快语句");

    };

    

    // 对快语句做一次cope操作以后,block的内现存就会放到堆里面.

    [hgBlock copy];

    // 或者

//    Block_copy(hgBlock);// 用于MRC机制下

 

 

二,开始分析

 

 

/**

    block是用copy修饰词来管理内存

    block即可以放在堆中,也可以使放在栈中.

    

 */

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

 

@property (nonatomic, copy) NSString* name;

 

 

 

使用快语句场景一

 

- (instancetype)init {

    if (self = [super init]) {

        __weak typeof(self) weakSelf = self;

        self.hgBlock = ^{

            __strong typeof(weakSelf) strongSelf = weakSelf;

            NSLog(@"%@", strongSelf.name);

        };

    

    }

    return self;

}

 

 

 

使用快语句场景二

// 创建一个person对象

    HGPerson* person = [[HGPerson alloc] init];

    

    // 弱指针

    __weak typeof(person) weakPerson = person;

    person.hgBlock = ^{

        

        // 若指针转成强指针

        __strong typeof(weakPerson) strongPerson = weakPerson;

        

        strongPerson.name = @"HG";

    };

 

 

posted @ 2015-10-02 21:39  花园晓雨  阅读(171)  评论(0编辑  收藏  举报