覆盖类和声明控制器中的所有内容之间的区别?

时间:2016-08-04 10:17:09

标签: ios storyboard override iboutlet

大家。我有两种编码方式:

我有一个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()
        }
    }
}

然后在我的故事板中:

enter image description here

并在我的控制器中:@IBOutlet weak var mapView: UGOMapView!

或者:

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()
        }
    }

然后在我的故事板中:

enter image description here

(我的mapView中有多个函数。我不知道那里的函数是否有问题?)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

第一种方法第二种方法之间的主要区别在于代码重用

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

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

仔细阅读: https://www.objc.io/issues/13-architecture/subclassing/

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