UIScrollView, кажется, использует много памяти на больших ContentSizes - PullRequest
0 голосов
/ 02 июля 2010

Я создал UIScrollView (canvas.scrollview) и в нем есть пользовательский UIView (canvas).

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

CGRect cs2 = CGRectMake (0, 0, 4000, 4000); Экран CGPoint = {[Основной экран UIScreen] .bounds.size.width, [Основной экран UIScreen] .bounds.size.height};

self.canvas.frame = cs2; // canvas_size;

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);

Но я заметил, что когда я установил размер содержимого прокрутки на большее значение, например 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 полностью заполняет память. Любая идея, почему просмотр прокрутки будет использовать столько памяти, и есть ли способ это исправить?

Ответы [ 2 ]

1 голос
/ 02 июля 2010

Я использую огромные прокрутки в моем текущем проекте (тысячи на тысячи пикселей), и это определенно не происходит для меня. Я думаю, что ваша UIView огромна, может быть проблемой, а не вашим видом прокрутки. Попробуйте установить размер UIView равным 768x1024, а затем увеличьте представление прокрутки до 4k x 4k и посмотрите, исчезнет ли проблема.

Если UIView окажется изображением (я сомневаюсь в этом, или вы, вероятно, упомянете об этом), вы должны знать, что iOS поддерживает только изображения размером до 1024x1024, после чего появляется небольшой " неопределенное поведение "с точки зрения использования памяти. Вам, вероятно, нужно изучить CATiledLayer, хотя обычный UIView без содержимого не должен занимать столько памяти, независимо от его размера, поэтому может возникнуть проблема и в других местах вашего проекта.

1 голос
/ 02 июля 2010

Я не думаю, что это представление с прокруткой, которое потребляет так много памяти, но подкласс UIView для пользовательского холста. Если холст действительно 4000 x 4000, система должна выделить достаточно памяти для хранения 32-битного изображения глубины этого размера, или около 64 МБ. Для таких больших представлений вы должны использовать CATiledLayer для статического содержимого или какую-либо систему плиточного представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...