在非ARC项目中包含ARC标头

时间:2012-03-06 15:42:38

标签: objective-c ios cocoa-touch static-libraries automatic-ref-counting

我创建了一个使用ARC编码的静态库。我计划分发这个库供其他人使用。我知道在非ARC项目中包含ARC静态库不需要做任何事情,但是包括ARC头文件呢?例如,我的ARC静态库的标头将属性声明为weakstrong,但是当我尝试将这些标头包含在非ARC项目中时,编译器就会吓坏。

有什么想法吗?

1 个答案:

答案 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属性。

像我说的那样;我还没有测试过这些。如果有效,请发布您的发现。