Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Objective-C

Войти
Регистрация
Восстановить пароль
 
synchuk2010
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 9
#1

Как оптимизировать код objective-c? - Objective-C

09.02.2016, 10:00. Просмотров 493. Ответов 3
Метки нет (Все метки)

Проблема заключается в том, что моё приложение жрёт много оперативной памяти (300 мб). На 4s приложение вылетает, на остальных - виснет. В приложении много картинок и таблиц с картинками. Мне нужно снизить нагрузку на оперативную память, как-то иначе грузить картинки с сервера. Пишите если нужен мой говнокод)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2016, 10:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как оптимизировать код objective-c? (Objective-C):

Как подружить Qt и Objective-C - Objective-C
Доброе время суток, уважаемые форумчане Возник вопрос, который уже с месяц довольно сильно беспокоит моё сознание и нарушает мой...

Как писать такую простую модель на Objective C? - Objective-C
задача простая: есть типа супермаркет, он же Main... и есть классы касса, покупатель, продавщица, корзина и товар. Корзина из себя...

Как в objective-c сделать кнопку вначале неактивной а затем активной - Программирование iOS
Я понимаю что это азы, но тем не менее помогите советом - мне нужно сделать кнопку неактивной (видимой но неактивной), а затем снова...

Как в Objective-C изменить стандартный переход в Storyboard из одной сцены к другой - Программирование iOS
В моем проекте пока стоит стандартный переход от сцены к сцене при push. А мне задумалось сделать что-то поинтереснее. Как это можно...

Как в objective-c сделать переход к следующему действию нажатием любой точки на экране? - Программирование iOS
для перехода к следующему событию мне необходимо нажать кнопку, а я хочу чтобы можно было нажать не кнопку а любую точку на экране, как это...

Objective C - Программирование iOS
Доброго времени суток. Знаю что тема уже стара так же как задница Аллы Пугачевой, но суть вопроса в том что я изучаю Objective C. и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
09.02.2016, 18:47 #2
открывать instruments, смотреть или есть утечки памяти, смотреть, что именно жрет память и там уже оптимизировать
0
synchuk2010
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 9
10.02.2016, 11:35  [ТС] #3
Нашол проблему в VM: ImageIO_GIF_Data і VM: CoreAnimation. Как мне это исправить? И ещё я не могу винести загрузку в метод viewDidLoad. Вот код из ячейки таблицы:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
NSString *filePath1 = [NSString stringWithFormat:@"%@",responsePhotos[0]];
NSURL *imgurl=[NSURL URLWithString:filePath1];
dispatch_queue_t queue =     dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
   NSData *dataimage1 = [NSData dataWithContentsOfURL:imgurl];
   UIImage *imim1 = [UIImage imageWithData:dataimage1];
    dispatch_async(dispatch_get_main_queue(), ^{
        if (imim1==nil) {
            cell.imgauto1.image=[UIImage imageNamed:@"camera_a.gif"];
        }else{
            cell.imgauto1.image=imim1;
        }
    });
});
0
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
11.02.2016, 09:53 #4
Вижу 2 проблемы с вашим кодом:

1. не относится к памяти, тем не менее у вас картинка грузится асинхронно и если подгрузка будет достаточно долгой, есть вероятность, что селл переиспользуется до того, как она закончится, и в селл выставится не та картинка
2. https://developer.apple.com/library/...ionQueues.html
If your block creates more than a few Objective-C objects, you might want to enclose parts of your block’s code in an @autorelease block to handle the memory management for those objects. Although GCD dispatch queues have their own autorelease pools, they make no guarantees as to when those pools are drained. If your application is memory constrained, creating your own autorelease pool allows you to free up the memory for autoreleased objects at more regular intervals.
Попробуйте обернуть в autorelease pool:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
@autoreleasepool { 
    NSData *dataimage1 = [NSData dataWithContentsOfURL:imgurl];
    UIImage *imim1 = [UIImage imageWithData:dataimage1];
    dispatch_async(dispatch_get_main_queue(), ^{
        if (imim1==nil) {
            cell.imgauto1.image=[UIImage imageNamed:@"camera_a.gif"];
        }else{
            cell.imgauto1.image=imim1;
        }
    });
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2016, 09:53
Привет! Вот еще темы с ответами:

Переход на Objective-C - Objective-C
День добрый, в настоящий момент я пишу на C++. Уже давненько душа тянется к чему-то новому, хочется что-то поменять. И вот в голову пришла...

Референция в Objective-C - Objective-C
Всем привет. Многие, кто пишет на Java, знают, что там есть возможность передавать референцию на объекты между классами. Делегирование...

Наследование в Objective C - Objective-C
У меня есть класс CustomCell, в котором объявлен прототип функции initDataCell. Тело функции описано в классах FolderCell,...

SystemWait в Objective C - Objective-C
Доброго времені суток. У меня вот какая проблема. Я роботаю с сервером в интернете. И в припципе моя функция будет начинать работать только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.02.2016, 09:53
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru