Block 03 - 内存管理

2019-08-05  本文已影响0人  石头89

Block 03 - 内存管理

Block 的 copy

当 Block 内部访问了对象类型的 auto 变量、__block 对象时

_Block_object_assign((void*)&dst->o, (void*)src->o, 3/*BLOCK_FIELD_IS_OBJECT*/);
_Block_object_assign((void*)&dst->b, (void*)src->b, 8/*BLOCK_FIELD_IS_BYREF*/);

_Block_object_dispose((void*)src->o, 3/*BLOCK_FIELD_IS_OBJECT*/);
_Block_object_dispose((void*)src->b, 8/*BLOCK_FIELD_IS_BYREF*/);

代码中如果使用了 __weak,在使用 clang 将 Objective-C 转换为 C++ 时,会有以下问题:
cannot create __weak reference in file using manual reference

解决方式(在命令中指定支持 ARC、运行时系统版本):
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc ==-fobjc-arc== ==-fobjc-runtime=ios-8.0.0== class.m -o class.cpp

__block 对象的内存管理

上一篇 下一篇

猜你喜欢

热点阅读