2013-09-04 2 views
0

내 앱에 내 iPad2 장치의 실제 메모리 사용량에 과부하가 걸리는 원인이되는 앱에 많은 png 이미지가 있습니다. 사운드 파일과 png 이미지가 많은 내 전체 응용 프로그램 폴더는 약 50-60MB의 프리 컴파일, 장치의 90MB이지만 여전히 런타임시 300MB ++까지 올라갑니다. 이전 ViewControllers 등의 맨 위에있는 ViewControllers .. 나는 또한 고치려고 노력 중이다.IOS에 거대한 PNG 이미지

나는 이상한 것을 발견했다. 하나의 배경을 표시함으로써 .png 이미지이다. 실제 메모리 사용량에 12 메가 바이트를 더하고있다. 스토리 보드에서 ImageView 이미지를 채우는 데 사용한 이미지는 내 프로젝트 폴더에서만 700KB입니다. 그것을 꺼내거나 이미지 필드를 비워두면 12MB의 메모리를 절약 할 수 있습니다 ...

많은 공간을 차지하고있는 앱에서 이러한 배경 이미지뿐만 아니라 다른 전경 이미지를 사용하고 있습니다.

어떤 제안이나 도움도 받으실 수 있습니다. 감사합니다.

+1

거대한 이미지가 당신을 죽일 수있는 곳을 그려야합니다. Quartzcore는 메모리 절약을위한 유용한 도구입니다! – Lugubrious

+0

팁 주셔서 감사합니다! :) – Himmi

답변

3

디스크 공간의 700kb 이미지는 메모리에 700kb 이미지를 의미하지 않습니다. 디스크에 저장되는 동안 압축되지만 메모리에 저장되면 크기가 커집니다.

프로젝트에서 많은 이미지를 사용하는 경우 [UIImage imageWithContentsOfFile:] 방법을 사용하는 것이 좋습니다. 내부적으로 이미지를 캐시하지 않으며 [UIImage imageNamed:]을 사용하는 것보다 메모리를 더 많이 제어 할 수 있습니다.

나를 위해, 일반적인 경험 법칙은 이것입니다. 이미지가 거대하고 앱에서 한 번 사용 된 경우 ->[UIImage imageWithContentsOfFile:], 이미지가 앱의 여러 위치에서 다시 사용되는 경우 ->[UIImage imageNamed:]

또한 투명도가 있으므로 .png 형식을 사용해야하는 경우 .webp에 기회를 줄 수 있습니다. 이 형식은 ios에서 공식적으로 지원되지 않지만 github에 사용자 정의 구현이 있습니다.

업데이트 : 나는 매우 많은 시간이 소요 천천히 그것을 발견으로

개인적으로, 전혀 내 애플 리케이션에 인터페이스 빌더를 사용하지 마십시오. 대신 모든 뷰를 프로그래밍 방식으로 작성하므로 [UIImage imageWithContentsOfFile:] 또는 [UIImage imageNamed:] 중에서 선택하는 것과 같은 유연성을 얻을 수 있습니다. UIImageView에 아울렛을 설정 한 다음 실제 이미지를 코드로 설정할 수 있습니다. png의 경우 iOS에서 선호하는 이미지 유형은 없습니다. 그것은 당신의 사건에 달려 있습니다. 투명도 -> png가 필요한 경우 비행기 이미지 -> jpg 만 있으면됩니다. 이것은 단지 간단한 예일뿐입니다. .webp의 경우 이미 언급 한 것처럼이 형식은 iOS에서 공식적으로 지원되지 않지만 직접 지원할 수 있습니다. 기본적으로 .webp는 .png를 대체하고 이미지의 투명도를 잃지 않고 프로젝트 폴더의 크기를 줄입니다.

호프가 도움이 되었으면 좋겠다!

+0

그래, 도와 줬어! 하지만 여전히 몇 가지 질문을 .. .. :). 정말로,이 성장은 정상입니까? 0,7 -> 12 ..? 스토리 보드를 사용하지 않고 모든 ImageView를 설정하고 대신 [UIImage imageWithContentsOfFile :]로 코딩하도록 제안 하시겠습니까? 대부분의 내 이미지는 단 한 번만 사용합니다. 결국 iOS 프로그래밍의 기본 유형은 png가 아닙니다. 내가 투명하지 않은 이미지에 대해 다른 것을 사용해야하고 투명한 이미지에 .webp를 사용하는 것을 고려해야합니까? – Himmi

+0

나는 아주 새롭고 인터페이스 빌더에서 아주 쉽게 돌아 다닐 수 있다고 생각한다. 특히 스토리 북을 만들 때부터 스토리 보드가 쉽게 작업 할 수 있다고 생각했습니다.이제는 ViewControllers와 다른 ViewControllers의 ViewControllers에서 .png 이미지, 애니메이션 및 재생 사운드를 표시하는 것에서부터 메모리 소비가 발생하는 것을보고 있습니다 (경고/충돌 등). 모든 것을 코드로만 변환하는 것은 거대한 프로세스이지만, 문제가 해결 될 수 있도록 최선을 다할 것입니다! 나는 단지 같은 결과를 얻는 것을 두려워합니다. – Himmi

+1

"는"imageWithContentsOfFile "또는"imageNamed "중에서 선택하는 것과 같은 융통성을 제공합니다. UIImageView에 아울렛을 설정 한 다음 코드에서 이미지를 설정하면됩니다."더 융통성있게 " 거짓인가? 인터페이스 빌더에서 만든 UIImageView가있는 경우이 두 가지 중에서 선택할 수 있습니다. –