iOS 10 [CFString release]:发送到解除分配的实例

时间:2016-07-01 11:44:37

标签: ios objective-c iphone xcode

最近,我已将iPhone升级到iOS 10.在iPhone上安装我的应用程序后,我发现当我在应用程序中使用tableView时,它肯定会崩溃。我在方法cellForRowAtIndexPath中创建了一些断点,并在诊断表中选择了Zombie Objects。但是消息[CFString release]: message sent to deallocated instance 0x17063b960总是出现在调试区域中。此问题仅出现在iOS 10 Beta上,我不确定iOS 10 Beta是否会导致此问题。有没有人像我一样遇到这个问题?我将不胜感激。

更新

当它返回cell时,会出现崩溃:Thread 1: EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)Thread 1: signal SIGKILL

相关代码显示为打击:

UITableViewCell * cell;

HKLoadingModel * model = [self modelForTableView:tableView];
ShopServiceType type = model == self.carwashLoadingModel ? ShopServiceCarWash : ShopServiceCarwashWithHeart;
JTShop *shop = [model.datasource safetyObjectAtIndex:indexPath.section];
NSArray * serviceArray = [self filterShopServiceByType:type andArray:shop.shopServiceArray];
NSInteger serviceAmount = serviceArray.count;
NSInteger sectionAmount = 1 + serviceAmount + 1;

if(indexPath.row == 0)
{
    cell = [self tableView:tableView shopTitleCellAtIndexPath:indexPath];
}
else if (indexPath.row == sectionAmount - 1)
{
    cell = [self tableView:tableView shopNavigationCellAtIndexPath:indexPath];
}
else
{
    cell = [self tableView:tableView shopServiceCellAtIndexPath:indexPath andShopService:serviceArray];
}

return cell;

3 个答案:

答案 0 :(得分:2)

尝试使用“工具”工具来跟踪您将消息传递到解除分配的实例的位置。 Apple为此good guide

  
      
  1. 启动仪器。
  2.   
  3. 在显示的性能分析模板选择对话框中,单击Zombies。
  4.   
  5. 从目标设备和处理列表中选择您的设备和应用。
  6.   
  7. 单击“选择”以创建跟踪文档。
  8.   
  9. 单击工具栏中的“录制”按钮(或按Command-R)开始录制。
  10.   
  11. 正常使用您的应用。
  12.   
  13. 如果对取消分配的对象进行了调用,则会在时间轴窗格中插入一个标志,并显示一个Zombie Messaged对话框,指示   消息已发送到特定内存中的已释放对象   地址。
  14.   
  15. 如果您关闭Zombie Messaged对话框,可以通过单击标志重新打开它。
  16.   
  17. 单击僵尸内存旁边的焦点箭头   地址以显示僵尸对象的内存历史记录   详细信息窗格,以及相应的引用计数和方法   呼叫。
  18.   
  19. 在详细信息窗格中选择Zombie事件(或您要调查的任何其他事件)。
  20.   
  21. 按Command-3在检查器的扩展详细信息区域中显示所选事件的堆栈跟踪。
  22.   
  23. 单击扩展详细信息中的“折叠”按钮   区域以隐藏堆栈跟踪中的系统调用。这使得它更容易   找到你的应用程序的方法。
  24.   
  25. 您的应用发出的呼叫颜色为黑色,前面是用户代码图标。
  26.   
  27. 双击堆栈跟踪中的方法以在Instruments中显示其代码。
  28.   
  29. 单击详细信息窗格顶部的Xcode按钮,在Xcode中打开代码进行编辑。
  30.   

就我而言,崩溃是由FoundationExtension pod版本0.59引起的。一旦我删除它,我就不再崩溃了。

答案 1 :(得分:1)

我们遇到了同样的崩溃并找到了导致崩溃的原因。我们使用了名为FoundationExtension的第三方库,其中覆盖了其NSObject类别中的serval memeory管理调用。我们删除了库,它工作正常。

答案 2 :(得分:0)

确保您的媒体资源属于Strong