当时使用block调用的时候传入的参数如果是id类型的对象的时候会报错,提示如下: 用法如下: __bridge_retained(也可以使用CFBridgingRetain)将Objective-C的对象转换为Core Foundation的对象,同时将对象(内存)的管理权交给我们,后续需要使用CFRelease或者相关方法来释放对象; __bridge_transfer(也可以使用CFBridgingRelease)将Core Foundation的对象转换为Objective-C的对象,同时将对象(内存)的管理权交给ARC。 问题是我想让大家分析一下一个对象存在的生命周期。 |
|
你是在A类调用的B类设置Block的方法,那result和signInfo在B类传递给A类后就结束了。 // A类 - (void)aMethod { // A中的方法 b.setCallBack:^(id *result, id *signInfo) { } } // B类 - (void)bMethod { // B中的方法 id *result; id *signInfo; self. callBack(result, signInfo); } // result和signInfo被释放 如果你是在Block闭包内截获外部的一个指针,指针在OC和Swift的Block里被截获时是不会强引用的,那它们的生命周期,就取决于外部。 |
|
10分 |
在oc中id类型本身就是一个指针,你定义的block的参数 id *result,传递的就是指针的指针。block其实是匿名的函数块,block中参数的生命周期在传递结束后就已经结束。其实更值得讨论的是block的生命周期是怎么样的。
|
如果是堆block,则生命周期和一个普通对象无异 |
|
10分 |
嗯,总结的很全。 |
嗯。谢谢啦。
|