为了更好地理解ARC,我正在寻找能够在启用ARC的情况下完美编译的示例代码,但在运行时崩溃。即可能忽略的常见陷阱,如果您以前从未遇到过这个问题,可能会导致调试噩梦。
将现实生活中的示例调整到重现问题的最小代码将非常有用。特别是如果ARC代码与C或C ++代码连接。
答案 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。