webBG - програмисти, машинно обучение, javascript, python, php, питам, говорим, публикации

UIScrollView изглежда използва много памет при големи ContentSizes

Създадох UIScrollView (canvas.scrollview) и имам персонализиран UIView (платно) вътре в него.

Нормалната конфигурация за стартиране е нещо подобно:

CGRect cs2 = CGRectMake(0, 0, 4000, 4000); CGPoint екран = {[UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height};

self.canvas.frame = cs2; //Размер на платното за рисуване;

self.canvas.scrollView.contentSize = canvas_size.size; self.canvas.scrollView.contentOffset = CGPointMake(canvas_size.size.width/2-screen.x/2, canvas_size.size.height/2-screen.y/2);

Но забелязах, че когато задам размера на съдържанието на scrollview на по-голяма стойност като 4000,4000; ще използва много повече памет. Например:

scrollview   view  real virtual
1000,1000 1000,1000 6  88
4000,4000 1000,1000 62  145
1000,1000 4000,4000 6  88

Бих искал да имам доста голяма работна площ, ако е възможно, но 8000x8000 напълно блокира паметта. Някаква идея защо scrollview ще използва толкова много памет и има ли начин да се поправи това?


  • ContentSize на UIScrollView не влияе върху използването на паметта. 02.07.2010
  • Ако това е вярно, тогава защо се променя само когато променя contentSize? 02.07.2010

Отговори:


1

Използвам огромни изгледи на превъртане в текущия си проект (хиляди на хиляди пиксели) и това определено не се случва за мен. Мисля, че вашият UIView е огромен може да е проблемът, а не изгледът ви с превъртане. Опитайте да зададете размера на UIView на 768x1024 и след това да увеличите изгледа за превъртане до 4k x 4k и вижте дали проблемът ще изчезне.

Ако случайно UIView е изображение (съмнявам се или вероятно ще го споменете), трябва да сте наясно, че iOS поддържа само изображения с размер до 1024x1024, след което има малко „недефинирано поведение“ по отношение на използването на паметта. Вероятно трябва да разгледате CATiledLayer, въпреки че обикновен UIView без съдържание не би трябвало да заема толкова много памет, без значение колко е голям, така че може да има проблем и другаде във вашия проект.

02.07.2010

2

Не мисля, че изгледът за превъртане използва толкова много памет, а персонализираният подклас на canvas UIView. Ако платното наистина е 4000 x 4000, системата трябва да отдели достатъчно памет, за да побере 32-битово дълбоко растерно изображение с такъв размер, или около 64 MB. За такива големи изгледи трябва да използвате CATiledLayer за статично съдържание или някакъв вид система за изглед с плочки.

02.07.2010
Нови материали

Записване на грешки — Как да записвате грешки във вашето приложение, за да ги отстраните по-късно
Записването на грешки е важна част от „обработването на грешки“. Накратко, когато възникнат определени грешки в програмите, вие искате да знаете за това. Това е особено важно при грешки. Ти..

Кратко въведение в теорията на графите
Кратко въведение в теорията на графите Втора част: внедряване на python на пълни графики В моята предишна статия въведох три основни концепции за графите: върхове, ръбове и тегла. В тази..

Днес ще пиша за машинно обучение. Смятам се за ентусиаст, а не за експерт, така че имайте това предвид. С това казано, искам...
Днес ще пиша за машинно обучение. Смятам се за ентусиаст, а не за експерт, така че имайте това предвид. С това казано искам да обясня защо машинното обучение има значение. За да бъда съвсем..

Какво е структурно типизиране и как Typescript го използва в своя полза?
Всички знаят тези дни, че „Typescript е строго синтактично надмножество на JavaScript и добавя незадължително статично въвеждане към езика.“. Но какво всъщност означава? Защо миграцията от..

3 начина за премахване на дубликати от масив в Javascript
Вие сте уеб разработчик? Програмист ли си? Тогава ще сте запознати с JavaScript и различните му вградени функции, методи и т.н. за различни реализации, проблеми и цели. Един от тези широко..

Архитектура и обучение на конволюционни невронни мрежи (7 точки):
Тази публикация предоставя подробности за архитектурата на Конволюционната невронна мрежа (CNN), функциите и обучението на всеки слой, завършвайки с резюме на обучението на CNN...

Създайте разширение за Chrome с помощта на Angular
Този урок е базиран на манифеста на разширението на chrome версия 3 (MV3), а също и на Angular версия 2+ (2, 3 и...). Ако не сте използвали манифест версия 3, можете да следвате този урок ,..