当前位置: 首页 > 工具软件 > LiVES > 使用案例 >

iOS Returning block that lives on the local stack 错误解决

湛博易
2023-12-01

在引用BabyBlueTooth时 出现

对于引用了外部变量的Block,如果没有对他进行copy,他的作用域只会在声明他的函数栈内(类型是__NSStackBlock__),如果想在非ARC下直接返回此类Block,Xcode会提示编译错误的




解决:


在ARC环境下,上述代码会编译通过,因为ARC会自动加入copy操作。

     typedef int(^MyBlock)();

        MyBlock func()

        {

           //ARC

            int i = 1;

           return  ^{ return i; };

        }

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·

        在非ARC下,必须把Block复制到堆中才可以在函数外使用Block

        typedef int(^MyBlock)();

        MyBlock func()

        {

             //ARC

             int i = 1;

             return [^{ return i; } copy];   在这里修改一下就好了

        }


 类似资料: