Objective-C中为何用copy修饰block

本文详细介绍了Objective-C中的Block概念及其使用方式,包括Block的基本定义、Block的内存管理选择(copy与strong的区别)、__block关键字的功能及使用场景,并通过实例说明了如何正确地在Block内外部使用这些特性。

1:什么是block?
block其实就是一个代码块,把你想要执行的代码封装在这个代码块里,等到需要的时候再去调用。那block是OC对象吗?答案是肯定的
官方文档如下


2:block要用copy修饰,还是用strong

block本身是像对象一样可以retain,和release。但是,block在创建的时候,它的内存是分配在栈(stack)上,而不是在堆(heap)上。他本身的作于域是属于创建时候的作用域,一旦在创建时候的作用域外面调用block将导致程序崩溃。
使用retain也可以,但是block的retain行为默认是用copy的行为实现的,

因为block变量默认是声明为栈变量的,为了能够在block的声明域外使用,所以要把block拷贝(copy)到堆,所以说为了block属性声明和实际的操作一致,最好声明为copy。

3:__block关键字的使用

在Block的{}体内,是不可以对外面的变量进行更改的,使用__block就能改变block块中变量的值

4:__block和__weak有什么区别?

  • __block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。
  • __weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。
  • __block对象可以在block中被重新赋值,__weak不可以。



  • 例如:


  • @interface ViewController ()

    @property (nonatomic, assign) void(^myblock)();

    @end


    @implementation ViewController

    - (void)viewDidLoad {

        [super viewDidLoad];

        [self test];//当此代码结束时,test函数中的所有存储在栈区的变量都会被系统释放, 因此如果属性的block是用assign修饰时  当再次访问时就会出现野指针访问.

        NSLog(@"haha"); // MRC下,这句代码相当于延缓一下执行

        self.myblock();// MRC 下,如果使用 retain  , assign 都会 野指针异常,只能用 copy; ARC 下,使用 assign (EXC_BAD_ACCESS)

    }


    - (void)test {

        int n = 5;

        [self setMyblock:^{

            NSLog(@"%d",n);

        }];

        

        self.myblock();

        self.myblock();

        self.myblock();

        NSLog(@"test--%@",self.myblock);

        

    }


    @end


  • 2017-11-20 01:59:14.605383+0800 test[1544:64331] 5

    2017-11-20 01:59:14.605597+0800 test[1544:64331] test--<__NSStackBlock__: 0x7fff56e01c18>

    (lldb) 



01、数据介绍数据整理全国各城市的《政府工作报告》文本,对“数字化政府”相关词汇中的所有词汇进行词频统计。计算在TF-IDF中引入包含时间维度的逆文本频率,参考刘文革等(2024)词汇词频处理,参考杨海生等(2020),计算地级市政府财政支出与全国财政支出比率,最终得到本文计量模型中使用的数字化政府建设指数。数据名称:地级市数字化政府建设指数数据年份:2007-2024年刘文革,耿景珠,杜明威.数“政”强贸:数字化政府建设与中国出口产品质量升级[J].数量经济技术经济研究,2024,41(06):67-87.杨海生,柳建华中山大学岭南学院,连玉君中山大学岭南学院,等.企业投资决策中的同行效应研究:模仿与学习[J].经济学(季刊),2020,19(04):1375-1400.02、数据指标数字化政府词汇:城市大脑 大数据发展管理局 大数据管理 大数据管理中心 大数据局 大数据战略 大数据中心 电子口岸 电子政务 电子签章 电子签名 电子政务外网 电子政务系统 互联网+政务服务 开放数据 可信身份认证 迁移上云 全网通办 市民云 数据共享交换 数据管理 数据管理中心 数据集聚 数据决策 数据开放 数据平台 数据驱动 数据融合 数据上云 数据社会 数据通 数据灾备中心 数据治理 数据中台 数据资源互通 数字化基础设施 数字化市场 数字化政府 数字社会 数字身份 数字生态 数字文化建设 数字乡村 数字协同 数字政府 数字政务一体化 通关数字化 网络通 网上政府 网上政府服务 微信城市 无线政务专网 无纸化通关 系统整合 信息资源共享平台 信息资源共享体系 一码通行 一网办 一网办结 一网通办 一云统揽 移动民生服务平台 移动政务 在线服务平台 在线政务服务 掌上办 掌上办公 掌上办事 政府机构微博 政府数字化 政府数字化转型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值