【发布时间】:2016-06-15 14:13:33
【问题描述】:
目前,我正在通过关注获取核心数据
CoreDataStack.sharedIntance.backgroundContext.performBlock({
let fetchRequest = NSFetchRequest(entityName: "Schedule")
let sortDescriptor = NSSortDescriptor(key: "startTime", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]
var result = [Schedule]()
mainContext.performBlockAndWait { [unowned self] in
do {
result = try mainContext.executeFetchRequest(fetchRequest) as! [Schedule]
success?(result)
} catch {
print("error is \(error)")
}
}
})
我得到一个错误
在闭包中引用属性 mainContext 需要显式的 self 明确捕获语义
我注意到一些解决方案,他们为块中的属性添加了self。
这样做好还是我们应该创建一个weak or unowned 以避免保留循环以及处理这种情况的最佳方法是什么。
【问题讨论】:
-
首先,Swift 3 的核心数据发生了很大的变化。鉴于您没有编写任何生产代码,我建议您学习它。其次,对自我的引用需要“自我”。在所有闭包中。
-
thanks.However,你能提供更多关于使用self的细节吗?它会导致内存泄漏吗?
-
这里的
self是什么(例如self.mainContext)?它是 UIKit 对象吗,比如 View Controller? -
@CouchDeveloper:Currenlty,
self是 NSObject 的子类 CoreDataStack。 -
从Core Data的角度来看,我对这段代码sn-p的目的有点困惑:如果
self是CoreDataStack对象,那么一定有一些CoreDataStack方法可以执行第一条语句CoreDataStack.sharedIntance.backgroundContext.performBlock(...)。在 backgroundContext 中,您使用在 mainContext 中获取的 varresult。从 backgroundContext 访问result无效 - 会崩溃。
标签: ios objective-c memory-management swift2 weak-references