美文网首页
objc_sync同步需要注意的坑

objc_sync同步需要注意的坑

作者: 差不多303 | 来源:发表于2019-03-09 17:17 被阅读0次

objc_sync_enter(obj); defer { objc_sync_exit(obj) } 可以用来同步一个方法,但是需要注意这里的obj在函数执行过程中可能会发生变化。比如下面方法

    private func sync<T>(_ obj:Any, action:(()->T)) -> T{
        objc_sync_enter(obj)
        NSLog("the sync<T> obj enter :\(Unmanaged.passUnretained(obj as AnyObject).toOpaque()) self:\(Unmanaged.passUnretained(self).toOpaque())")
        let t = action()
        objc_sync_exit(obj)
        NSLog("the sync<T> obj exit :\(Unmanaged.passUnretained(obj as AnyObject).toOpaque()) self:\(Unmanaged.passUnretained(self).toOpaque())")
        
        return t
    }

在执行完成let t = action()其实obj有可能发生变化,打印日志如下:

2019-03-09 17:04:47.122516+0800 Shelf[6725:585195] the sync<T> obj enter :0x000000010f81b120 self:0x0000000107e14c90
2019-03-09 17:04:47.123046+0800 Shelf[6725:585195] the sync<T> obj exit :0x0000000104199290 self:0x0000000107e14c90

相关文章

  • objc_sync同步需要注意的坑

    objc_sync_enter(obj); defer { objc_sync_exit(obj) } 可以用来同...

  • 并发容器

    1.CopyOnWriteArrayList: 使用 CopyOnWriteArrayList 需要注意的“坑”主...

  • AVPlayer做视频播放需要注意的问题

    需求:视频在cell中可以点击放大和缩小(仅有一个视频) 注意1.需要同步数据 2.需要同步ui ...

  • 同步函数需要注意的事项

    1,明确哪些代码是多线程运行代码。2,明确共享数据。3,明确多线程运行代码中哪些语句是操作共享数据的。 同步函数需...

  • 上奇问题总结

    1. mongoDB同步ES的问题 : 有一些数据同步时,需要注意ES的mapping.json文件的定义。 如果...

  • 帧同步坦克大战移动系统

    上节讲到了匹配系统,匹配完成之后,我们就需要开始进行帧同步了。但是,需要注意,只有房主才可以调用开始帧同步的方法。...

  • GIT的简单使用

    注意: 1 新建的项目需要的操作 ————>init ————>remote 2 添加了文件同步操作 ————> ...

  • 2021-01-18 同步与异步

    以调用方角度来讲,如果需要等待结果返回,才能继续运行就是同步不需要等待结果返回,就能继续运行就是异步注意:同步在多...

  • FTP文件上传

    上传代码 需要注意的坑 ftp.setFileType(FTPClient.BINARY_FILE_TYPE); ...

  • Android开发需要注意的坑

    背景此文纯粹总结开发Android以来遇到的一些坑,一来为了防止再次掉坑,二来是希望后面的朋友能躲开这些坑。 包名...

网友评论

      本文标题:objc_sync同步需要注意的坑

      本文链接:https://www.haomeiwen.com/subject/boqepqtx.html