我使用Typhoon Framework来集成我的所有核心组件。我正在处理我的数据层(使用FMDB而不是Core Data)。我有一个LocalDataStore类来处理向SQLite读取和写入数据。这是一个单例类,它具有一个设置数据库的初始化方法。然后我有一个引用它的PlayerDAO。
当我启动应用程序时,会创建LocalDataStore并调用初始化方法。然后它创建DAO类,当它尝试访问LocalDataStore时,我收到了EXC_BAD_ACCESS错误。
启用"启用Zombie Objects"在发布方案中,我收到一个额外的错误:
-[myapp.SQLiteLocalStore retain]: message sent to deallocated instance 0x1740ab5e0
以下是我如何在台风大会中进行设置:
dynamic func config() -> TyphoonDefinition {
return TyphoonDefinition.configDefinitionWithName("MyApp.plist")
}
dynamic func localStore() -> AnyObject {
return TyphoonDefinition.withClass(SQLiteLocalStore.self, configuration: {
(definition) in
definition.injectProperty("databaseName", with: TyphoonConfig("sqlite.filename"))
definition.performAfterInjections("initDatabase")
definition.scope = .Singleton
})
}
dynamic func playerDAO() -> AnyObject {
return TyphoonDefinition.withClass(SQLitePlayerDAO.self, configuration: {
(definition) in
definition.injectProperty("localStore", with: self.localStore())
})
}
查看错误发生时的断点,它发生在TyphoonComponentFactory中的这一行:
- (id)newOrScopeCachedInstanceForDefinition:(TyphoonDefinition *)definition args:(TyphoonRuntimeArguments *)args {
...
instance = [pool objectForKey:poolKey]; // line 431
...
}
poolKey = @"localStore"
调试器表示它目前正在初始化playerDAO。该游泳池只有一个关键的" localStore"值为_NSZombie_myApp.SQLiteLocalStore
关于可能出现什么问题的任何想法?
答案 0 :(得分:2)
好吧,将definition.scope = .Singleton
更改为definition.scope = .LazySingleton
修复它......就我而言,无论如何,这可能是一种更好的方法。
我仍然很好奇我是否做错了导致普通Singleton的内存错误。