zoukankan      html  css  js  c++  java
  • 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";

        };

  • 相关阅读:
    [bzoj1251]序列终结者
    Codeforces #Round 406(Div.2)
    [3.23校内训练赛]
    [APIO2009]
    [APIO2016]
    [bzoj1901]动态区间k大
    [9018/1904]火星商店
    [bzoj3673/3674可持久化并查集加强版]
    [bzoj1297][SCOI2009]迷路
    [bzoj1218][HNOI2003]激光炸弹
  • 原文地址:https://www.cnblogs.com/iOS771722918/p/4852772.html
Copyright © 2011-2022 走看看