__block SelfClass * blockSelf = self;
是非常方便的语法.
解决方法 块的目标是使其尽可能自动且透明,以使用具有最小语法的块并使它们“正常工作”.非___块变量作为默认值,更符合块所代表的“闭包”的概念.在执行通过块声明时,块会快照块中引用的所有变量的状态.这包括复制内存/状态和保留块中捕获的任何Objective-C对象引用.
__block有效地打破了块内状态的封装.非常有用,但需要程序员手动管理对象引用.
即非___块变量“只是工作”更常见的__block变量,因此,默认行为是倾向于“正常工作”.
实际上,捕获块内状态的成本通常很小.对应用程序性能的可衡量影响通常很少,并且通常表明具有更深刻性质的架构问题.
如果通过:
__block SelfClass * blockSelf = self;
你指的是Blocks和ARC的交叉产品吗?是的,这有点不幸.但编译器也警告你需要注意一个非常现实的问题.但是,更清洁的解决方案显然更可取.
总结以上是内存溢出为你收集整理的objective-c – 编译器不将每个变量都视为__block变量的原因是什么?全部内容,希望文章能够帮你解决objective-c – 编译器不将每个变量都视为__block变量的原因是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)