【问题标题】:NSString crashes while logging to fileNSString 在记录到文件时崩溃
【发布时间】:2015-12-15 18:17:01
【问题描述】:

我有一个蓝牙设备,它以每秒 400 赫兹的速度发送加速度计数据。我使用这些数据来做几件事:1.) 根据这些数据为轮子制作动画,以及 2.) 标准偏差。

然而,我的问题是,一段时间后(在打印 1000 行之后),应用程序在我使用数据创建 NSString 的同一行崩溃,因此我可以将该数据写入一个文本文件。当这个崩溃发生时,我检查字符串中的每个变量以确保它是有效的并且每个都是有效的。我已经看到 NSString 报告本身是一个 (INT),所以我认为某处存在内存泄漏。

我添加了一个@autoreleasepool{},但同一行崩溃了。这是它的屏幕截图。

如何找出导致崩溃的原因?

【问题讨论】:

  • 应用程序是多线程的吗?
  • 是的,它是多线程的。
  • 这个方法是线程安全的吗?有锁吗?对我来说,这似乎是胎面安全问题
  • 无锁。我从 CoreBluetooth 回调接收数据并通过委托方法发送字节。有一个 for 循环可以创建 x,y,x 值的数组。

标签: ios objective-c crash nsstring


【解决方案1】:

已通过将copy 添加到_locationString 来解决此问题。

[_locationString copy]

【讨论】:

  • 那么您知道为什么会发生这种情况,因为该修复对我来说似乎不太可靠。更好的做法是为 locationString 使用具有 copy 属性的属性,以便在设置时复制它,而不是在使用时复制(而且您每次访问时都不需要该代码)。
  • 我确实将locationString 的属性设置为copy。出于某种原因,我还必须添加上述内容。不知道为什么。
  • 如果它是一个属性,那么你应该使用 getter(即self.locationString)。
猜你喜欢
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多