2016-10-19 2 views
0

Swift에서 작성한 유니버설 게임은 약 200 개의 이미지로 구성되어 있으며 약 200MB의 RAM을 사용합니다. 그러나 스토리지에서는 15MB 만 차지합니다. Xcode에서 기본보기의 크기는 600x600이고 내 UIImageView가 상주하는보기는 200x200입니다. 저의 목표는 최소한의 양의 램을 사용하고 최소한의 저장 공간을 사용하지만 이미지의 품질을 유지하는 이미지를 만드는 것입니다.iOS 앱의 최적 이미지 크기 찾기 및 메모리 사용량 줄이기

RAM의 경우 : 메모리를 적게 사용하기 위해 이미지를 표시하기 전에 이미지의 크기를 조정하려면 약간의 코드를 실행해야하는데, 약간 CPU를 많이 사용한다고 걱정할 수 있습니다.

저장 공간 : 모든 iOS 장비를 충족시키기 위해 필요한 이미지 크기를 계산할 수있는 방법이 있습니까?

아니면 완전히 잘못된 길을보고 있습니다.

+0

1. xassets를 사용하는 경우 iOS가 문제를 해결하지 못합니까? – morksinaanab

+0

다운로드하는 장치의 자산 만 게시 2. 파일 크기를 줄이기 위해 png 이미지를 pngquant에 항상 실행할 수 있습니다. https://pngquant.org – morksinaanab

+0

3. 스프라이트 솔루션을 병합 할 수 있습니까? 1 이미지의 모든 이미지가 표시되지만 일부만 표시됩니까? – morksinaanab

답변

2

애셋 카탈로그는 서로 다른 기기에 대해 서로 다른 애셋을 보유하는 가장 효율적인 방법이며, 기기가 특정 기기에 필요한 애셋 만 다운로드하도록 허용하는 "app thinning"을 즐기는 것입니다. 가능한).

예를 들어 이미지보기가 200x200 인 경우, 다양한 유형의 기기에 대해 가장 효율적인 메모리를 원한다면 1x (즉 200x200), 2x (즉 400x400), 3x 해당 자산을 600x600으로 변환)하고 자산 카탈로그의 효율성을 통해 해당 장치에 적합한 규모의 자산을 다운로드하고 사용합니다.

위의 예에서 200x200 이미지와 같은 1x 이미지 만 제공하는 경우 망막 장치에서 픽셀 화되어 많은 사용자를 보지 않게됩니다. 또는 3x 이미지 (예 : 600x600 이미지) 만 제공 할 수 있지만 모든 장치에서 날카 로워 보일 수는 있지만 망막이 아닌 장치에서 필요한 것보다 많은 메모리를 사용하게됩니다 (또는 JIT (just-in-time) 크기 조정, 메모리 영향을 상쇄 할 수 있지만 성능은 저하됩니다).

scale 해상도의 기기에서 잘 작동하는 가장보기 좋고 반응이 빠른 UI를 원한다면 세 가지 해상도 모두를 제공해야합니다. 또한 자산 카탈로그를 사용하면 런타임에 자산을 쉽게 선택할 수있게되고 앱 축소 가능성이 생깁니다.

+0

그 방법을 사용하겠습니다.그러나 이미지 파일의 크기에 관계없이 메모리 사용량은 크기에 따라 결정됩니다. UIImage (이름 : "")를 사용할 때, iOS는 캐시 된 이미지를 언제 공개합니까? – james

+0

메모리 사용은 이미지가 사용 된 이미지보기의 크기가 아니라 이미지의 크기에 따라 결정됩니다. 일반적으로 PNG 또는 JPG 형식으로 압축 된 애셋의 크기에 관계없이 이미지를 사용하면 압축되지 않으며 일반적으로 픽셀 당 4 바이트 (예 : 4x 너비 x 높이)가 필요합니다. – Rob

+0

메모리 해제와 관련하여'UIImage (named :)'를 사용하면 이미지가 캐시됩니다. 하지만 그 이미지 캐시는 메모리 압력에 반응하므로''UIImage (named : "")가 아닌)에'nil'에 대한 강력한 참조를 설정하는 한 즉시 메모리를 볼 수는 없지만 메모리가 필요한 (즉, 메모리 경고가 있음) 캐시는 강력한 참조를 해제합니다. – Rob

관련 문제