作爲一名自學,或者說是教過的程序員,我一直在想,當你設置一個變量或一個let時,實際上會發生什麼。今天,我得到了@Cocoadelica非常友好的幫助,爲入職用戶建立了一個模式。我們看中了這個解決方案:實例化 - 它有什麼作用?
AppDelegate.swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let isOnboarded:Bool = NSUserDefaults.standardUserDefaults().boolForKey("Onboarded")
let storyboard = UIStoryboard(name: "Main", bundle: nil)
// instantiate your desired ViewController
let dashboardViewController = storyboard.instantiateViewControllerWithIdentifier("DashboardVC") as! UIViewController
let onboardingViewControllerOne = storyboard.instantiateViewControllerWithIdentifier("OnboardingVCOne") as! UIViewController
let window = self.window
if (isOnboarded) {
window!.rootViewController = dashboardViewController
}else{
window!.rootViewController = onboardingViewControllerOne
}
return true
}
但我注意到,它實例2個viewControllers,即使邏輯將只需要一個。我經常看到這一點。我們實例化永遠不會使用的變量,而不是在需要時使用。我們爲什麼要做這個? 它是否對性能沒有影響,或者它是如此之小以至於我們這樣做,因爲人類是人類,它可能使代碼更清晰一些?
只是爲了讓你知道:還有一個模式稱爲延遲初始化。不要一次創建所有對象,而是嘗試延遲初始化直到真正需要對象。 [鏈接](http://en.m.wikipedia.org/wiki/Lazy_initialization) – Duc
@Duc我注意到你不能懶惰的讓,只有懶惰的變種。爲什麼?我得到的印象是,讓我們比var的成本更低,所以最好讓我們還是懶惰的var?也許這是一個愚蠢的問題/評論.. – KML
「我注意到你不能懶惰,只有懶惰var」這是一個已知和令人遺憾的Swift限制,我期望最終將被克服。與此同時,自己實現它並不困難,正如我在我的書中演示的那樣:http://www.apeth.com/swiftBook/ch03.html#EXlazy – matt