iOS 5中的协议和分配属性

Rog*_*oli 4 iphone xcode ios xcode4 ios5

我正在尝试在iOS 5中创建自己的自定义代理.在iOS 4中,我通常使用'Assign'属性:

@property(nonatomic, assign) id<AnyProtocol> delegate;
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试合成时,我收到以下错误消息:

error: Automatic Reference Counting Issue: Existing ivar 'delegate' for unsafe_unretained property 'delegate' must be __unsafe_unretained
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?

Kri*_*dra 6

此错误是因为在ARC ivars下默认为strong

此错误告诉您,您已声明具有__unsafe_unretained(分配)所有权的属性,但默认情况下,ivar具有__strong所有权,因此它们不能在一个中.您可以

  1. 省略将自动创建的ivar
  2. 定义ivar以匹配您的(assign)属性声明:

    __unsafe_unretained id <FileListDelegate> delegate;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 定义属性以匹配ivar的隐式__strong所有权:

     @property (weak) id <FileListDelegate> delegate;
    
    Run Code Online (Sandbox Code Playgroud)

这三个选项无耻地从用户chrispix的答案复制到这个帖子中.Credit去了那里