iOS-项目开发1-Block
Block回顾
Block分为NSStackBlock, NSMallocBlock, NSGloblaBlock。即栈区Block,堆区Block,全局Block。在ARC常见的是堆块。
在ARC中下面四中情况下系统会将栈区中的Block转移到堆区
1:使用了Copy
2:在一个函数中返回值为Block
3:使用了Strong修饰符
4:在方法名中含有usingBlock的Cocoa框架方法或Grand Central Dispatch 的API中传递Block时。
void(^block)(void)=^{ NSLog(@"这是Globle Block"); }; NSLog(@"%@", [block class]); int para = 100; void(^mallocBlock)(void)=^{ NSLog(@"这是Malloc Block, para=%d", para); }; NSLog(@"%@", [mallocBlock class]); NSLog(@"%@", [^{NSLog(@"这是Stack Block, para=%d", para);} class]);
// 输出结果 2019-03-01 16:02:45.571283+0800 RAC[29198:438361] __NSGlobalBlock__ 2019-03-01 16:02:45.571395+0800 RAC[29198:438361] __NSMallocBlock__ 2019-03-01 16:02:45.571493+0800 RAC[29198:438361] __NSStackBlock__
** Block会自动截获自动变量,在不用__block 修饰变量时,块捕获的变量值不会改变。(可以简单等同于值传递和引用传递)
int para = 100; void(^mallocBlock)(void)=^{ NSLog(@"para=%d", para); }; ++para; mallocBlock(); NSLog(@"para=%d", para); __block int other = 100; void(^otherBlock)(void)=^{ NSLog(@"para=%d", other); }; ++other; otherBlock(); NSLog(@"para=%d", other);
// 输出结果 2019-03-01 16:07:18.299909+0800 RAC[29452:446423] para=100 2019-03-01 16:07:18.300076+0800 RAC[29452:446423] para=101 2019-03-01 16:07:18.300173+0800 RAC[29452:446423] para=101 2019-03-01 16:07:18.300253+0800 RAC[29452:446423] para=101
分类:
iOS-回顾
标签:
block
, block copy
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix