Xcode 为什么MKMapView将NSObject作为属性

Xcode 为什么MKMapView将NSObject作为属性,xcode,mkmapview,Xcode,Mkmapview,我试图理解MKMapView类 根据文件: MKMapView的属性之一是注释。 但是MVC的前提不是视图不拥有数据吗 在我看到的类的示例实现中,注释属性实际上是在包含mapview对象的MapViewController.h中声明的。那么注释是如何成为MapView的一个属性的呢 请指出我的任何假设/理解是否错误。 谢谢 MKMapView的属性之一是注释。但前提不是这样吗 MVC的特点是视图不拥有数据 像地图视图这样的视图不应该管理数据——也就是说,它不应该知道或关心数据来自何处,不应该担心

我试图理解MKMapView类

根据文件:

MKMapView的属性之一是注释。 但是MVC的前提不是视图不拥有数据吗

在我看到的类的示例实现中,注释属性实际上是在包含mapview对象的MapViewController.h中声明的。那么注释是如何成为MapView的一个属性的呢

请指出我的任何假设/理解是否错误。 谢谢

MKMapView的属性之一是注释。但前提不是这样吗 MVC的特点是视图不拥有数据

像地图视图这样的视图不应该管理数据——也就是说,它不应该知道或关心数据来自何处,不应该担心保存数据等等。但是在大多数情况下,如果不知道视图中应该表示什么数据,视图就很难知道如何绘制自己。你不能期望标签在屏幕上显示正确的字符,除非你告诉它标签的文本应该是什么,对吗?注释也是如此。地图视图不知道也不关心它们来自哪里,或者它们是什么类别的。只要他们实现了MKAnnotation协议,地图视图就会很满意。当然,它必须保留添加到地图上的任何注释,但不需要知道关于它们的任何其他信息

在我看到的类的一个示例实现中,注释 属性实际上是在MapViewController.h中声明的,它包含 映射视图对象

地图视图控制器通常也需要了解注释。毕竟,首先管理注释并将其添加到地图中的通常是控制器。此外,视图控制器通常是充当地图视图代理的对象,因此当有人轻触注释的附件时,该对象必须做出响应

那么注释是如何成为MapView的一个属性的呢

MKMapView负责为地图上显示的地理区域显示正确的注释。为此,它需要知道可以显示的所有注释。您可以添加希望在关联区域可见时地图显示的注释,并且无需在每次地图区域更改时确定哪些注释可见。为了做到这一点,地图显然必须跟踪所有添加的注释

不必这样。MKMapView可以像UITableView一样实现;它可能会要求学员显示给定区域的数据。正如UITableViewDataSource具有
-tableView:cellForRowAtIndexPath:
,MKMapDelegate可能具有
-mapView:annotationsForRegion:
方法。但是如果这样做的话,每个地图代理都必须能够有效地找到给定区域的注释,因此会有很多问题,比如如何正确地实现四叉树,以便为地图视图提供正确的注释集。将所有这些逻辑放在MKMapView中可以使类变得非常、非常易于使用。由于MKMapView没有管理注释,因此没有违反MVC