查找在运行时崩溃的有效Objective-C ARC代码的示例

时间:2011-10-19 22:06:35

标签: objective-c llvm automatic-ref-counting

为了更好地理解ARC,我正在寻找能够在启用ARC的情况下完美编译的示例代码,但在运行时崩溃。即可能忽略的常见陷阱,如果您以前从未遇到过这个问题,可能会导致调试噩梦。

将现实生活中的示例调整到重现问题的最小代码将非常有用。特别是如果ARC代码与C或C ++代码连接。

1 个答案:

答案 0 :(得分:4)

许多人的快速例子我和bbum一样思考。

从CF ...转换到NS ...如果做错了就会混淆ARC,例如:

CFArrayRef *supportedInterfaces = CNCopySupportedInterfaces();
NSArray *interfaceNames = (__bridge_transfer NSArray *)supportedInterfaces;
CFRelease(supportedInterfaces);

由于__bridge_transfer在释放CFArrayRef时保留NSArray,因此会过度释放supportedInterface。在这种情况下,要么不使用CFRelease(),要么使用plain __bridge。