在一个按钮上点击大约 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 应用程序变慢然后最终崩溃的主要内容,如果未能解决你的问题,请参考以下文章