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

来源:互联网 发布:商家给淘宝开消费积分 编辑:程序博客网 时间:2024/06/05 20:26

在引用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];   在这里修改一下就好了

        }


0 0
原创粉丝点击