解释@property id <delegateName>的语法

sno*_*und 1 syntax delegates properties objective-c

在使用喜欢的东西编写代理时,我看到了很多代码引用

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

通常在哪里id<mySuperCoolDelegate>,是属性的数据类型.所以问题是:

  1. 我的理解是否正确,上面的语法告诉编译器数据类型的id是mySuperCoolDelegate?

  2. 是否可以使用这种代码(为id指定的数据类型)的任何其他示例?

谢谢!

gil*_*sho 6

这段代码是objective-c实现接口的方式(如在Java或Go中).使用"id"意味着你在编译时不知道它将是什么类型的对象.但是在尖括号中使用协议你告诉编译器无论它将是什么对象,它都需要支持'mySuperCoolDelegate'协议.如果没有 - 编译器会告诉你.

  • Objective-C已经是多态的.不完全是其他OOP语言的方式,但事实上,它是多态的.如果这是"像其他语言中的XY一样"那么它就是"实现多重继承的目标-c方式"和/或"这指的是协议.协议是在Java中实现接口的目标-C方式". (2认同)