0

所以我不确定这是如何工作的。我简要查看了一位同事的 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 更好,在什么情况下?谢谢。

4

2 回答 2

0

我会选择选项 3,它看起来像这样:

Address : NSObject <MKAnnotation>

然后在实现类时,实现符合MKAnnotation协议所需的方法。

这样,您就可以两全其美。

协议与 C# 或 Java 等语言中的接口非常相似。主要区别之一是能够要求某些方法而其他方法是可选的。由于 Objective-C 是一种动态语言,因此您会看到许多调用,例如[foo responseToSelector:@selector(someSelector:)]. 如果-someSelector:被标记为可选,您需要检查接收者是否“响应”该消息。但是,如果它被标记为必需,如果您没有实现该方法,编译将引发警告。查看Objective-C 语言参考以获取更多信息

于 2012-06-05T04:30:50.837 回答
0

您不能对 id 类型使用强关键字,请改用:

@property (nonatomic, assign, readwrite) id<MyDelegate> delegate;
于 2012-06-05T04:39:41.197 回答