ios - MKMapSnapshotter WatchKit 内存错误

标签 ios memory watchkit mkmapsnapshotter

在连接到 Apple Watch 的真实 iPhone 上测试我的“ watch 应用程序”/iOS 应用程序 watch 扩展时,我遇到了 MKSnapshotter 的一些重大问题!

在我的一个接口(interface) Controller 中,我调用了以下函数:

  func createMapSnapshot(){
    //Snapshotter for overview image
    self.options = MKMapSnapshotOptions()
    self.options!.region = getEndRegion()
    self.snapshotter = MKMapSnapshotter(options: options!)
    snapshotter!.startWithCompletionHandler() {snapshot, error in

        dispatch_async(dispatch_get_main_queue()) {
            var finalImage = self.drawEndRun(snapshot.image, snapshot: snapshot)

            self.mapImage.setImage(finalImage)
        }
    }
}

这应该创建 map 图像并用它填充我的 WKInterfaceImage。
一旦我创建了图像,我的内存就会从大约 3 MB 跳到 20 MB 并保持在那里,即使我设置了 options = nil 和 snapshotter = nil。我还在控制台上打印了以下消息:

WatchKit Extension[9548:2529231] BSXPCMessage 收到错误消息:连接中断

但最糟糕的部分来了:当我想创建另一个快照时,我的 Watch App 由于内存错误而崩溃!我认为发生这种情况是因为快照程序在分配内存后不会释放内存......我该如何手动执行此操作或有人有其他想法?

它与 getEndRegion() 函数无关!我还使用没有选项的默认快照器对其进行了测试-> 相同的结果!

如果我在模拟器中测试应用程序一切正常!

更新:

我搜索了 MKMapSnapshotter 的文档,它说,如果应用程序在前台,它只能提供快照,因此无法从主应用程序呈现,并且分配给 iOS watch 扩展的内存太低,所以有没有别的办法??

最佳答案

模拟器可以访问的内存比手机上运行的扩展可用的内存要多得多。我建议使用 openParentApplication:reply: 向您的 iPhone 应用发起请求。并在那里工作。

第二个问题:为什么要自己生成 map 图像? WKInterfaceMap本质上是在 Watch 上为您执行此操作。

关于ios - MKMapSnapshotter WatchKit 内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29938216/

相关文章:

ios - 如何在 iOS 应用中共享 Firebase 身份验证数据?

c - 使用 char 进行动态内存分配

c++ - 测量内存的潜伏期

ios - watch 套件 : 'sharedApplication' is unavailable: not available on iOS (App Extension) - Use view controller based solutions where appropriate instead

ios-simulator - watchkit 扩展 2 iOS 应用程序在模拟器启动时崩溃

objective-c - 可以使用 Apple Watch Simulator 进行录音吗?

ios - GVRSDK iOS Xcode 链接器错误

ios - 工具栏在转场后消失 - Swift

ios - 在重叠区域点击手势事件

c - 我如何发现 Valgrind 中被抑制的错误?