使用弱属性而不是协议

时间:2016-06-30 02:53:19

标签: objective-c properties

如您所知,当我们应用必须声明委托的协议时。

@property (weak) id<NameOfProtocol> delegate;

但是,当我声明这样(不使用协议)

时,Xcode会显示错误消息
@property (weak) id<NameOfObject> pointer;

这有什么问题?

2 个答案:

答案 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;