使用来自不同线程的共享内存

时间:2015-05-15 21:49:07

标签: multithreading swift

我有一个多线程的奇怪问题。我想打印一个表视图,因此启动一个使用进度条运行的新线程。最终这个线程死于内存错误,我正在寻找原因。现在我得到了

  

malloc: *对象0x10000078c的错误:无效的签名   指针从自由列表中出列    在malloc_error_break中设置断点以调试对象的CaLister(27054,0x7fff73ea3300)malloc: 错误   0x60800043bcc0:无效指针从空闲列表中出列   * 在malloc_error_break中设置断点以进行调试

但是大部分时间(仍然很少发生!)它只是停止而没有特定的(但肯定是与内存相关的)错误。当我从调试器查看时,我的数据是nil。但是他们没有被触及,因为他们仍然可以在我的桌面视图中显示。

现在的问题是:我是否需要采取任何预防措施来访问主线程中分配的数据,以便我可以安全地从分离的线程中访问它们?

修改 我的打印线程就像这样(剥离代码):

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) { self.performPrint  (true) }

func  performPrint (async:Bool) {
  //First get the shared print info object so we know page sizes.  The shared print info object acts like a global variable.
  let sharedPrintInfo = NSPrintInfo.sharedPrintInfo()

  let printObject = PSPrint ()

  //Allocate a new instance of NSView into the variable printPageView
  var frame = NSRect(x: 0, y: 0, width: sharedPrintInfo.paperSize.width-sharedPrintInfo.leftMargin-sharedPrintInfo.rightMargin, height: sharedPrintInfo.paperSize.height-sharedPrintInfo.topMargin-sharedPrintInfo.bottomMargin)
  let basePrintPageView = PSPrintView(frame: frame)

  var printPageView:PSPrintView
  for pageNo in 1...paperDimensions.pages {
    paperDimensions.pageNo = pageNo

    printPageView = basePrintPageView.clone(pageNo)

    //Set the option for the printView for what it should draw.
    paperDimensions.pageNo = pageNo

    //Finally append the view to the PSPrint Object.
    printObject.printViews.append(printPageView)
  }
  dispatch_async(dispatch_get_main_queue()) {
    printObject.printTheViews() //print all the views, each view being a 'page'.
  }
}

printPageView = basePrintPageView.clone(pageNo)

访问我的表格视图(我获取要打印的数据)有时会返回nil。

Edit2:我刚注意到它不是崩溃的后台线程,而是主线程: - /更多地抓我的脑袋,但我可能不得不关闭这个问题。

0 个答案:

没有答案