所以我不确定这是如何运作的。我简要地看了一下同事的C#(我不是.NET开发人员),我看到很多传递给方法的东西都是符合接口的类对象。这也是Objective-c中的好事吗?
例如,我正在搞乱MapKit API并且我创建了自己的类,它符合MKAnnotation协议,所以我可以拥有自定义视图和一些额外的属性,用于在地图上删除的典型引脚。我计划使用我创建的这个类,
Address : NSObject
当我在地图上放置引脚时,而不是MKPlacemark类。在我的其他视图控制器和模型类中,我该做:
@property (nonatomic, strong) id <MKAnnotation> object; //1
或
@property (nonatomic, strong) Address *object; //2
我从示例1开始,但是当我实际需要Address对象的一些属性时,我发现自己不得不对对象进行类型转换,这似乎就是重点,或者我忽略了这一点?所以我想我的最终问题是,1或2更好,在什么情况下?感谢。
答案 0 :(得分:0)
我会选择看起来像这样的选项3:
Address : NSObject <MKAnnotation>
然后,当您实现该类时,请实现符合MKAnnotation
协议所需的方法。
通过这种方式,您可以充分利用这两个方面。
协议与C#或Java等语言中的接口非常相似。其中一个主要区别是需要某些方法的能力,并且其他方法是可选的。由于Objective-C是一种动态语言,因此您会看到许多调用,例如[foo responseToSelector:@selector(someSelector:)]
。如果-someSelector:
被标记为可选,则需要检查接收方是否“响应”该消息。但是,如果它被标记为必需,如果您没有实现该方法,则编译会抛出警告。有关详细信息,请查看Objective-C Language Reference
答案 1 :(得分:0)
您不能对ID类型使用强关键字,请改用:
@property (nonatomic, assign, readwrite) id<MyDelegate> delegate;