我有一个懒惰属性的问题。我以为我得到了它们但也许我没有/也许它是一个错误
我班上有一个懒惰的数组
@lazy var enteredRegions = Array<String>()
现在在
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool
我有
self.enteredRegions.append(clRegion!.identifier);
这很难用EXC_BAD_ACCESS崩溃。
现在如果我删除@lazy:
var enteredRegions = Array<String>()
一切正常
所以......这个怎么样? :D我的理解是self.enteredRegions
无论如何都会创造它
(我使用UIWindow和CLLocationManager执行此操作,并按照我的想法运行)
答案 0 :(得分:4)
首先,如果我们将var包装在一个类中,它只是起作用:
class RegionManager {
@lazy var enteredRegions = Array<String>()
}
在AppDelegate
中,我声明了@lazy var regManager = RegionManager()
。
然后,在application:didFinishLaunching:
中,我修改并使用该值,它可以在不吐出一个字的情况下工作:
regManager.enteredRegions.append("New!")
println("Regions: \(regManager.enteredRegions)") // Regions: [New!]
在此之后,我尝试更改为某些原生值,例如String
,Int
等等,它们都会失败。
所以,我的猜测是这个奇怪的行为实际上是编译器本身的一个错误,它可能根植于 native 类型的某些优化,也许是内部池或者那个苹果没有告诉我们。