在一个按钮上点击大约 60 多次我的 iPad 应用程序变慢然后最终崩溃

Posted

技术标签:

【中文标题】在一个按钮上点击大约 60 多次我的 iPad 应用程序变慢然后最终崩溃【英文标题】:On a button tap about 60 plus times My iPad App getting slow and then crashed finally 【发布时间】:2014-07-26 09:46:02 【问题描述】:

在启动时,我的应用程序运行得非常完美,一段时间后它变得越来越慢......

响应动作大概需要8到10秒,最后崩溃了 我不知道为什么这一切会发生。 我在 uiviewcontroller 上使用了一个集合视图,它的所有内容视图都是在自定义单元类中创建的。

在使用 Instruments 在 iPad 2 上进行测试后,拍摄了这些屏幕截图。

现在我该怎么办.??你看到这里有什么问题吗...???

这是 UICollectionView 单元格中的加号按钮,用于执行操作,按钮点击时间随机增加,达到 300000+ 毫秒

注意--->主线程显示0.0毫秒

这是什么意思....????

请指引我正确的方向

这里是这个方法的完整代码

 -(void)btnPlus:(id)sender event:(id)event

NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:myCollection];
btnIndex = [myCollection indexPathForItemAtPoint: currentTouchPosition];
MyCell *cell = (MyCell*)[myCollection cellForItemAtIndexPath:btnIndex];
NSString *newCode = [productID objectAtIndex:btnIndex.row];
newQty = cell.cellQty.text;
if ([updatedCodes containsObject:newCode])

    //NSLog(@"Object Already Exist...");
    for (i = 0; i < [updatedCodes count]; i ++)
    
        if ([newCode isEqualToString:[updatedCodes objectAtIndex:i]])
        
            qnty = [newQty integerValue];
            qnty = qnty + 1;
            cell.cellQty.text = [NSString stringWithFormat:@"%d", qnty];
            newQty = cell.cellQty.text;
            [updatedQty replaceObjectAtIndex:i withObject:newQty];
        
    
    if (![indexPaths containsObject:btnIndex])
    
        [indexPaths addObject:btnIndex];
    
    prdID = [productID objectAtIndex:btnIndex.row];
    [self UpdateProduct]; // Open DB SQlite DB Connection and update Table Record and Close Connection.
 
else

    [updatedCodes addObject:newCode];
    qnty = [newQty integerValue];
    qnty = qnty + 1;
    cell.cellQty.text = [NSString stringWithFormat:@"%d", qnty];
    newQty = cell.cellQty.text;
    [updatedQty addObject:newQty];
    if (![indexPaths containsObject:btnIndex])
    
        [indexPaths addObject:btnIndex];
    
    prdID = [productID objectAtIndex:btnIndex.row];
    [self BuyProduct]; // Open DB SQlite DB Connection and update Table Record and Close Connection.

[myCollection reloadItemsAtIndexPaths:indexPaths]; // I think problem is here.

我认为问题在于 在 CollectionView 中的特定索引路径上重新加载 一次又一次地导致问题,因为它需要 91% 的时间来执行。我说的对吗..???

我应该/可以在哪里改进我的代码?

【问题讨论】:

这可能就是您应该尽量避免在模拟器中“测试”您的应用程序的原因。在最旧的设备上运行应用程序,比如 iPad 2,应该会发现你的所有问题。 @SergiusGee 请检查我编辑的问题 【参考方案1】:

您在主线程(上图中的线程 1)上的活动非常繁重,这会导致应用程序变得无响应。这似乎比内存使用更成问题。

您需要在仪器中分析您的应用以获取更多详细信息 - 您的屏幕截图中有一个按钮。使用时间分析器,它会告诉您哪些方法占用了您所有的时间。这些将需要优化和/或移动到后台线程,但如果没有工具和代码的详细信息,就无法提供更多帮助。

【讨论】:

感谢您的回复,您能告诉我如何使用时间配置文件吗?它在哪里? 我确实告诉过你。点击“仪器配置文件”按钮 因此,在仪器的顶部屏幕截图中,您可以双击方法的名称,它会在您的代码中打开一个视图,显示哪些行占用了时间。 是的,我试过了,它在某些代码行显示 10%、11% 有时 0.2% 或 0.8%,在某些代码行显示 50%、67% 和其中一行代码为 100%。 那是什么意思,我认为 67% 或 100% 是不好的,那我该怎么办

以上是关于在一个按钮上点击大约 60 多次我的 iPad 应用程序变慢然后最终崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIPickerView 上添加 UIToolbar? (iPhone/iPad)

SIGABRT 每次触摸点击,不一致的 iPad iOS

iPad View 无法正确传输到 iPad

如何在 iPad 上播放系统按钮点击声音?

ipad:图像加载和内存管理问题以及应用程序崩溃

iOS解决按钮短时间内多次点击只触发一次事件方法