非ARC和弱财产5

时间:2013-05-31 13:01:05

标签: iphone ios cocos2d-iphone

我正在使用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)

2 个答案:

答案 0 :(得分:2)

__ weak是一个仅限弧的功能,并且没有正式替换

通过迈克灰尝试MAZeroingWeakRef (https://github.com/mikeash/MAZeroingWeakRef

OR

通过合理的实验室进行PLWeakCompatibility (https://github.com/plausiblelabs/PLWeakCompatibility

-

你可以回到分配和代码将编译,但因为没有自动nilling分配变量(而不是__weak变量)它会改变语义,并可能导致崩溃的道路

答案 1 :(得分:0)

在您的财产声明中使用unsafe_unretained代替weak,它应该以相同的方式运作。

iOS 4.x及5.0及更高版本均支持

unsafe_unretained,因此它向后兼容