I가 다음 문제 : I (16 개)의 사각형 그리드 (각 I가 상속 생성 된 클래스를 표시하는 기본 뷰 객체 (즉 UIView의 상속)가불량 메모리 관리 성능
UIImageView에서), 4x4 레이아웃.
16 개의 정사각형 각각은 160x160이며 30kb보다 크지 않은 이미지 (각 사각형마다 다른 이미지)를 포함합니다. 그러나 이미지는 전체 크기로 프로그램의 다른 위치에서 사용되기 때문에 500x500이므로 setFrame 메서드를 사용하여 "square"클래스의 크기를 160x160으로 조정합니다.
이- 이 사각형의 각 기본 뷰 객체에 추가 할 때, 메모리 사용량을 증가 : 응용 프로그램이 실행되는 엑스 코드의 메모리 관리 기능을보고
, 나는 몇 가지를 발견했습니다 앱의 1MB 씩 인스턴스화시에는 발생하지 않지만 기본 뷰 객체에서 [self addSubview : square]를 사용하여 추가 할 때만 가능합니다.
- 모든 사각형에 대해 동일한 이미지를 사용하면 메모리 증가량은 최소한 입니다. 이미지없이 정사각형 객체를 초기화하면 기본적으로 0이됩니다.
- 동일한 앱이 시뮬레이터에서 실행될 때 실제 장치에서 수행하는 메모리의 1/6을 사용합니다 ( ).
전체적인 요점은 다음과 같습니다. 왜 30kb 이미지를로드 할 때 각 사각형이 1MB의 메모리를 사용합니까? 이것을 줄이는 방법이 있습니까? 나는 많은 다른 방법으로 이미지를 만들려고 시도했다 : [UIImage imageNamed:img]
, [UIImage imageWithContentsFromFile:path]
, [UIImage imageWithData:imgData scale:scale]
그리고 프레임의 크기를 조정하지 않았다.
빠른 답변과 제안에 감사드립니다.결국 범인은 UIImageView를 init'ing하고 크기를 조정한다고 알았습니다. UIImageView를 인스턴스화하기 전에 UITextBeginImageContext를 사용하여 현재 컨텍스트에서 새 이미지를 설정하기 전에 몇 줄의 코드를 동적으로 크기를 조정하고 있습니다. UIGraphicsEndImageContext입니다. 이는 그 자체로 1MB/이미지에서 150k/이미지로 다소 축소되었습니다. 나는 비록 메모리 사용량을 더 낮출 수 있는지 알아보기 위해 노력하고 있습니다. 다시 한번 감사드립니다. – user2491253
그건 정확히 제가 제안한 것입니다, 즉 크기 이미지가 먼저입니다. 네가 알아 낸 것 같은데. 잘 했어!!! – Rob