Ios 重写类和在控制器中声明所有内容之间的区别?

Ios 重写类和在控制器中声明所有内容之间的区别?,ios,storyboard,overriding,iboutlet,Ios,Storyboard,Overriding,Iboutlet,各位。我有两种可能编码: 我有一个mapView,它需要一些变量。我想知道最好的方法是什么 第一: class UGOMapView: MKMapView, MKMapViewDelegate, CLLocationManagerDelegate { let regionRadius: CLLocationDistance = 1000 var usrLocation: CLLocationManager! var annotationView: MKAnnotati

各位。我有两种可能编码:

我有一个mapView,它需要一些变量。我想知道最好的方法是什么

第一:

class UGOMapView: MKMapView, MKMapViewDelegate, CLLocationManagerDelegate {

    let regionRadius: CLLocationDistance = 1000 
    var usrLocation: CLLocationManager!
    var annotationView: MKAnnotationView!


    func initUserLocation() {
        if (CLLocationManager.locationServicesEnabled()) {
            usrLocation = CLLocationManager()
            usrLocation.delegate = self
            usrLocation.requestAlwaysAuthorization()
            usrLocation.requestLocation()
        }
    }
}
然后在我的故事板中:

在我的控制器中:
@ibvar映射视图:UGOMapView

或:

然后在我的故事板中:


(我的mapView中有不止一个函数。我不知道那里的函数是否有关系?

您的第一种方法很好。这是因为,它提供了代码分离和单个修改点。如果您为地图视图创建单独的类,并且假设任何问题都与地图相关,您将非常确定导致问题的代码行将位于此类中。此外,如果您想处理与地图相关的操作,可以在此处处理它们。另一个好处是您可以对多个地图视图使用同一类。对于视图控制器,您不能对其他地图视图使用相同的代码。

第一种方法与第二种方法的主要区别在于代码可重用性

第一种方法总是更好,因为无论何时需要修改或更改该类的任何内容,都可以直接重定向到该类

在第二种方法中,当您需要添加一些使您感到困惑的更改时,它变得难以管理

通读以下内容:


您将更好地了解何时进行子类化以及何时不进行子类化。

非常感谢。这是否每次都适用?或者,在某些情况下,第二种编码方式是最好的?当您在地图上没有太多编码,并且要在单视图控制器上使用地图视图时,您可以选择第二种方式。在这种情况下,使用第二种方法并没有错,因为您可以确定在哪里使用了map view,并且可以轻松调试。希望它能消除您的疑虑。因此,在任何情况下,第一种方法始终是最好的方法?没关系吧?
class MainViewController: UIViewController, MKMapViewDelegate, UITableViewDelegate, UITableViewDataSource, CLLocationManagerDelegate {

    @IBOutlet weak var mapView: MKMapView!
    let regionRadius: CLLocationDistance = 1000 
    var usrLocation: CLLocationManager!
    var annotationView: MKAnnotationView!


    override func viewDidLoad() {
        super.viewDidLoad()
        if (CLLocationManager.locationServicesEnabled()) {
            usrLocation = CLLocationManager()
            usrLocation.delegate = self
            usrLocation.requestAlwaysAuthorization()
            usrLocation.requestLocation()
        }
    }