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";

        };

  • 相关阅读:
    vuejs 实战 双向数据绑定
    ubuntu16安装cuda,cudnn,gpu版opencv
    ubuntu编译安装nginx并且配置流服务器
    安装使用mongodb
    c++ 编译安装ffmpeg
    apache2 日志文件太大的解决方案
    sql注入
    制作自己的电子词典
    python传递可变参数
    工厂模式
  • 原文地址:https://www.cnblogs.com/iOS771722918/p/4852772.html
Copyright © 2011-2022 走看看