2

我正在使用 cocos2d v1.1.0-beta2b。我的项目没有使用 ARC。它曾经工作得很好,但我们现在刚刚尝试将项目的最小 ios 版本从 4.3 更改为 5.0,我们开始出现编译时错误

“弱属性的合成只允许在 ARC 或 GC 模式下”

似乎是因为这个(来自 cocos2d 代码的示例)

// The delegate of the scroll layer object.
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0
@property (nonatomic, weak) id<CCScrollLayerDelegate> delegate;
#else
@property (nonatomic, assign) id<CCScrollLayerDelegate> delegate;
#endif

我应该怎么做才能解决它?

从代码中简单地删除它是否安全,只留下@property (nonatomic, assign) id delegate; ? (我假设它没问题,因为直到今天我们的代码仍然使用它,因为直到今天我们的目标是 4.3 而不是 5)

4

2 回答 2

2

__weak 是仅弧线功能,没有官方替代品

尝试 mike ash 的 MAZeroingWeakRef ( https://github.com/mikeash/MAZeroingWeakRef )

或者

PLWeakCompatibility 由似是而非的实验室 ( https://github.com/plausiblelabs/PLWeakCompatibility )

--

您可以依靠 assign 并且代码将编译,但由于没有自动 nilling 分配变量(与 __weak vars 相对)它会改变语义并可能导致崩溃

于 2013-05-31T13:54:01.993 回答
0

在你的属性声明中使用unsafe_unretained而不是weak,它应该以相同的方式工作。

unsafe_unretained在 iOS 4.x 和 5.0 及更高版本中均受支持,因此它为您提供向后兼容性

于 2013-05-31T13:05:10.300 回答