最近,我已将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;
答案 0 :(得分:2)
尝试使用“工具”工具来跟踪您将消息传递到解除分配的实例的位置。 Apple为此good guide:
- 启动仪器。
- 在显示的性能分析模板选择对话框中,单击Zombies。
- 从目标设备和处理列表中选择您的设备和应用。
- 单击“选择”以创建跟踪文档。
- 单击工具栏中的“录制”按钮(或按Command-R)开始录制。
- 正常使用您的应用。
- 如果对取消分配的对象进行了调用,则会在时间轴窗格中插入一个标志,并显示一个Zombie Messaged对话框,指示 消息已发送到特定内存中的已释放对象 地址。
- 如果您关闭Zombie Messaged对话框,可以通过单击标志重新打开它。
- 单击僵尸内存旁边的焦点箭头 地址以显示僵尸对象的内存历史记录 详细信息窗格,以及相应的引用计数和方法 呼叫。
- 在详细信息窗格中选择Zombie事件(或您要调查的任何其他事件)。
- 按Command-3在检查器的扩展详细信息区域中显示所选事件的堆栈跟踪。
- 单击扩展详细信息中的“折叠”按钮 区域以隐藏堆栈跟踪中的系统调用。这使得它更容易 找到你的应用程序的方法。
- 您的应用发出的呼叫颜色为黑色,前面是用户代码图标。
- 双击堆栈跟踪中的方法以在Instruments中显示其代码。
- 单击详细信息窗格顶部的Xcode按钮,在Xcode中打开代码进行编辑。
醇>
就我而言,崩溃是由FoundationExtension
pod版本0.59引起的。一旦我删除它,我就不再崩溃了。
答案 1 :(得分:1)
我们遇到了同样的崩溃并找到了导致崩溃的原因。我们使用了名为FoundationExtension的第三方库,其中覆盖了其NSObject类别中的serval memeory管理调用。我们删除了库,它工作正常。
答案 2 :(得分:0)
确保您的媒体资源属于Strong
。