我创建了一个使用ARC编码的静态库。我计划分发这个库供其他人使用。我知道在非ARC项目中包含ARC静态库不需要做任何事情,但是包括ARC头文件呢?例如,我的ARC静态库的标头将属性声明为weak
和strong
,但是当我尝试将这些标头包含在非ARC项目中时,编译器就会吓坏。
有什么想法吗?
答案 0 :(得分:3)
对于strong
,您可以使用retain
。他们是完全相同的。
weak
比较棘手,虽然我知道有几种方法可行,但我不确定处理它的最佳方法。
首先,确保您确实需要它。如果您支持iOS4,那么无论如何都不能拥有weak
,所以这个问题没有实际意义。我的直觉是,我可能只是避免weak
并使所有这些问题消失。弱者很好,但在大多数情况下避免这种情况并不是那么重要。
尽管如此,有一些方法可行。最好的方法是在标头中声明weak
个没有属性的访问者。而不是:
@property (nonatomic, readwrite, weak) id delegate;
这样做:
- (id)delegate;
- (void)setDelegate:(id)aDelegate;
然后,您仍然可以在实现文件中声明weak
属性。调用者仍然可以使用点符号,BTW。
这里可能会出现编译错误,因为setDelegate:
技术上需要__strong id
。如果是这种情况,只需手动实施setDelegate:
- (void)setDelegate:(id)aDelegate {
_delegate = aDelegate;
}
没有测试过,但这应该有效。您也可以在_delegate
块中声明ivar __weak
为@implementation
,而不是将其声明为weak
属性。