При нажатии кнопки около 60 с лишним раз. Мое приложение для iPad работает медленно, а затем, наконец, вылетает.

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

для ответа на действие требуется от 8 до 10 секунд, и, наконец, происходит сбой Я не знаю, почему все это происходит. Я использую представление коллекции на uiviewcontroller, все его представления содержимого создаются в пользовательском классе ячеек.

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

Где я должен/могу улучшить свой код?


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