【问题标题】:how to use delegates with Automatic Reference Counting如何使用具有自动引用计数的委托
【发布时间】:2011-06-30 01:53:42
【问题描述】:

我已经加入了 ARC 的潮流。在过去,我会像这样声明我的委托属性:

@property(assign) id<MyProtocol> delegate;

所以我想我会在 ARC 下这样做:

@property(weak) id<MyProtocol> delegate;

并非如此。在 .m 中的 @synthesize 语句上,我有一个编译 error:

*语义问题:__weak 属性 'delegate' 的现有 ivar 'delegate' 必须是 __weak*

我已经宣布它很弱!另外,我如何将实现协议的类传递给弱引用的属性。我是否必须将其包装在那些奇怪的 obj_unretained 调用之一中?

对此的任何帮助将不胜感激。

【问题讨论】:

  • ARC 可以公开讨论。 iOS 5 特定的 API 不能。
  • 言下之意是iOS 5支持GC Obj-C,这大概是保密的,除非Apple宣布它(我不知道他们有没有;我太忙没有跟上)。

标签: iphone ios ios5 automatic-ref-counting


【解决方案1】:

“ivar”表示“实例变量”,您没有显示。我打赌它看起来像这样:

@interface Foo : NSObject {
    id delegate;
}

@property (weak) id delegate;

错误的意思是它必须看起来像这样:

@interface Foo : NSObject {
    __weak id delegate;
}

@property (weak) id delegate;

如果属性声称是弱的,那么最终存储该值的 ivar 也必须是弱的。

【讨论】:

  • 或者您可以完全删除 ivar 并让 @synthesize 行也为您处理。 :)
  • 你的假设是正确的。还有 DaveDelong - 你是在告诉我,1.5 年来我一直在编写带有 ivars 的 iOS 以及 @property 声明,而我在合成时不需要 ivar?!这太棒了,哈哈!谢谢!
  • @Mike 感觉不错。在过去的一年中,跨架构和耦合器增加了这种能力。不过,它现在已经完成了。
  • 然而,如果一个 ivar 没有被声明,它将在 Xcode 中不可见。 (已提交错误)。
  • @Dylan:你需要两个下划线。
猜你喜欢
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多