При натискане на бутон повече от 60 пъти Моето приложение за iPad става бавно и след това накрая се срива

При стартиране приложението ми работи перфектно, след известно време става все по-бавно и по-бавно....

отнема около 8 до 10 секунди, за да отговори на действието и накрая се срива Не знам защо се случва всичко това. Използвам collectionview на uiviewcontroller, всичките му изгледи на съдържание се създават в персонализиран клас клетки.

след като използвах Инструменти за тестване на iPad 2, направих тези снимки на екрана.

сега какво да правя.?? виждал ли си някакъв проблем тук...???

тук има бутон Плюс в UICollectionView Cell за извършване на действие, при натискане на бутон времето се увеличава произволно и достига до 300 000+ ms

Имайте предвид, че ---> Основната нишка показва 0,0 ms

Какво означава това....????

моля, насочете ме в правилната посока

въведете описание на изображението тук

въведете описание на изображението тук

въведете описание на изображението тук

тук е пълният код на този метод

 -(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% от времето за изпълнение. прав ли съм..???

Къде трябва/мога да подобря своя код?


person M Zubair Shamshad    schedule 26.07.2014    source източник
comment
Вероятно затова трябва да избягвате тестването на приложенията си в симулатора. Стартирането на приложението на възможно най-старите устройства, като iPad 2, трябва да разкрие всичките ви проблеми.   -  person Sergey Grischyov    schedule 26.07.2014
comment
@SergiusGee моля, проверете моя редактиран въпрос   -  person M Zubair Shamshad    schedule 04.08.2014


Отговори (1)


Имате много тежка активност в главната нишка (нишка 1 в диаграмата по-горе), което ще доведе до спиране на реакцията на приложението. Това изглежда е по-голям проблем от използването на паметта.

Трябва да профилирате приложението си в инструменти, за да получите повече подробности - има бутон точно там в екранната ви снимка. Използвайте инструмента за профилиране на времето и той ще ви каже кои методи отнемат цялото ви време. Те ще трябва да бъдат оптимизирани и/или преместени във фонови нишки, но без подробности от инструментите и кода няма как да предложим повече помощ.

person jrturton    schedule 26.07.2014
comment
благодаря за отговора, ще ми кажете ли как да използвам времеви профил? къде е? - person M Zubair Shamshad; 26.07.2014
comment
Казах ти. Щракнете върху бутона, който казва профил в инструменти - person jrturton; 26.07.2014
comment
Така че в горната екранна снимка на инструментите можете да щракнете двукратно върху името на метода и той ще отвори изглед на вашия код, показващ кои са редовете, които отнемат време. - person jrturton; 26.07.2014
comment
да, опитах, показваше за някои редове от код 10%, 11% понякога 0,2% или 0,8%, а на някои редове от код показваше 50%, 67% и на един от редовете беше 100%. - person M Zubair Shamshad; 26.07.2014
comment
какво означава това, мисля, че 67% или 100% е лошо, така че какво трябва да направя - person M Zubair Shamshad; 26.07.2014
comment
Ще трябва да поставите кода във вашия въпрос, с процентите за редовете. Процентът е точно колко време от този конкретен метод е изразходвано за един конкретен ред, така че дори ако методът е наистина добре оптимизиран, той пак ще добави до 100% :) - person jrturton; 26.07.2014
comment
кой метод трябва да публикувам тук, има много методи на този viewController и има няколко реда код със знак % като 67%, 50% или 100% в тези методи. - person M Zubair Shamshad; 26.07.2014
comment
CellForItemAtIndexPath (най-горният в проследяването на вашите инструменти) би бил добро начало. - person jrturton; 26.07.2014
comment
актуализирах целия въпрос, моля, прегледайте го и ми предложете какво да правя сега. - person M Zubair Shamshad; 04.08.2014