如您所知,当我们应用必须声明委托的协议时。
@property (weak) id<NameOfProtocol> delegate;
但是,当我声明这样(不使用协议)
时,Xcode会显示错误消息@property (weak) id<NameOfObject> pointer;
这有什么问题?
答案 0 :(得分:2)
所以当你去
@property (weak) id<NameOfProtocol> delegate;
你说我想要一个指向符合NameOfProtocol类型的变量。你需要它是一个id
类型,因为你实际上并不知道变量类型是什么(只要它实现了NameOfProtocol中的方法,你就不在乎了)
,而
@property (weak) id<NameOfObject> pointer;
没有意义,因为你说我想要一个变量,但我不知道类型因此我需要id
但它符合NameOfObject ...这是矛盾的,因为你有类型
因此在这种情况下你应该只有一个正常的弱变量
@property (weak) NameOfObject *pointer;
答案 1 :(得分:1)
@property (weak) id<NameOfProtocol> delegate;
表示如果变量符合NameOfProtocol
@property (weak) id<NameOfObject> pointer;
表示变量可以是任何类型,但它的类型必须是NameOfObject
所以没有意义;
而不是
@property (weak) NameOfObject *pointer;