在Swift 2中使用UnsafeMutablePointer和CFRunLoopObserverContext

庆阮

我有以下代码

private func addRunLoopObserverForSaving() {
    var _self = self

    withUnsafeMutablePointer(&_self) { (pSelf) -> Void in
        var observerContext = CFRunLoopObserverContext(
            version: 0,
            info: pSelf,
            retain: nil,
            release: nil,
            copyDescription: nil)

        withUnsafeMutablePointer(&observerContext, { (pObserverContext) -> Void in

            let observer = CFRunLoopObserverCreate(
                kCFAllocatorDefault,
                CFRunLoopActivity.BeforeTimers.rawValue,
                true,
                0,
                { (observer, activity, context) -> Void in
                    guard context != nil else { return }

                    let pObserverContext = UnsafeMutablePointer<CFRunLoopObserverContext>(context)
                    let pGraphsModel = UnsafeMutablePointer<GraphsModel>(pObserverContext.memory.info)

                    let z = pGraphsModel.memory
                    ...
                },
                pObserverContext
            )

            CFRunLoopAddObserver(CFRunLoopGetCurrent(), observer, kCFRunLoopDefaultMode)
        })
    }
}

由于某些原因,linez = pGraphsModel.memory总是给我一个EXC_BAD_ACCESS我不确定UnsafeMutablePointer在检索存储值时是否使用正确。任何想法表示赞赏!

PS。这发生在XCode 7 beta5上。

庆阮

我自己进行了修复,结果context在回调中实际上是观察者上下文的info成员。因此,而不是:

let pObserverContext = UnsafeMutablePointer<CFRunLoopObserverContext>(context)
let pGraphsModel = UnsafeMutablePointer<GraphsModel>(pObserverContext.memory.info)

let z = pGraphsModel.memory
...

应该只是

let pGraphsModel = UnsafeMutablePointer<GraphsModel>(context)

let z = pGraphsModel.memory
...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Swift 2中使用#

来自分类Dev

在Swift 2中使用#

来自分类Dev

Swift中的CMBlockBuffer,UnsafeMutablePointer等

来自分类Dev

Swift UnsafeMutablePointer和UnsafeMutablePointer <UnsafePointer <SomeType >>

来自分类Dev

在Swift 2中使用TouchesMoved

来自分类Dev

如何在Swift 2和3中使用通用加密和/或计算sha256

来自分类Dev

swift3中UnsafeMutablePointer中的错误

来自分类Dev

在Swift 3中使用NSNumber和Integer值

来自分类Dev

无法在iOS Swift中获得SecKey UnsafeMutablePointer

来自分类Dev

无法在iOS Swift中获得SecKey UnsafeMutablePointer

来自分类Dev

Swift 2中使用Alamofire进行错误处理

来自分类Dev

在Swift 2,Xcode 7.0.1中使用'self'

来自分类Dev

坚持在Swift和MapKit中使用MKPinAnnotationView()

来自分类Dev

在Swift中使用NSFileManager和createDirectoryAtPath

来自分类Dev

如何在Swift中使用(?)和(!)

来自分类Dev

在Swift中使用CGEventTapCreate麻烦和参数

来自分类Dev

在Swift中使用RestKit和CoreData

来自分类Dev

在Swift中使用CGEventTapCreate麻烦和参数

来自分类Dev

在应用程序内购买可在Swift 2中使用,但现在不更新到Swift 3和Xcode 8

来自分类Dev

在Swift中使用sortedArrayUsingSelector

来自分类Dev

在Swift中使用NSTimer

来自分类常见问题

在Swift中使用谓词

来自分类Dev

在Swift中使用标签

来自分类Dev

在Swift中使用<-

来自分类Dev

在Swift中使用stringByReplacingCharactersInRange

来自分类Dev

在Swift中使用AudioBufferList

来自分类Dev

在Swift中使用RestKit

来自分类Dev

在Swift中使用edgeLoopFromRect

来自分类Dev

在Swift中使用PFLogInViewController