我什么时候必须实例化一个类,什么时候不应该?

时间:2015-10-31 14:54:45

标签: swift core-location

假设我有一个类let geocoder = CLGeocoder()的实例。

我现在可以调用geocodeAddressString CLGeocoder类的方法{/ 1}}。

geocoder.geocodeAddressString(myObject["Location"] as! String, completionHandler: {
    (placemarks, error) -> Void in
    ...
}

虽然,为什么我不能直接做以下事情?

// I haven't instantiated the `CLGeocoder` class this time
CLGeocoder.geocoder.geocodeAddressString(myObject["Location"] as! String, completionHandler: { (placemarks, error) -> Void in
    ...
})

例如,我可以这样做:

// I don't instantiate the UIView class here
UIView.animateWithDuration(0.4, animations: {
    () in
    ...
}

我什么时候必须实例化一个类,什么时候不应该?

1 个答案:

答案 0 :(得分:2)

在你的第二个例子中,函数“animateWithDuration()”就是我们所说的 static 方法,这意味着你可以在不实例化该类的实例的情况下调用它。

在您的第一个示例中,由于您调用“地理编码器”的实例实际上并不是该类中的变量,因此您无法静态调用它。

一般来说,如果要使用静态方法,则不必实例化,但是如果要使用非静态方法,则必须使用该类的实例(实例化)版本。

这是面向对象编程的基础。