2008-10-14 2 views
2

저는 CALayers를 많이 사용하여 GoogleMaps와 다른 타일 기반 이미지를 만듭니다 (더 많은/덜 세부적인 동일한 이미지의 다른 버전).CALayer에서 UIImage를 사용하여 성능이 저하 되었습니까?

내가이 일을 사용하고 코드는 다음과 같습니다

UIImage* image = [self loadImage:obj.fileName zoomLevel:obj.zoomLevel]; 
[CATransaction setValue:(id)kCFBooleanTrue 
       forKey:kCATransactionDisableActions]; 
obj.layerToAddTo.contents = [image CGImage]; 
[CATransaction commit]; 

난 정말 내가 게으른이기 때문에있는 CoreGraphics을 사용하여 파일에서의 CGImage로드처럼 느끼지 않는다. 그러나 큰 성과 향상이 있다면 나는 그럴 것입니다! LoadImage는 이미지를로드하기위한 올바른 경로를 얻기 위해 문자열을 mangle 처리하고 obj는이 스레드에 필요한 모든 정보를 보유하는 NSObject-struct입니다.

도움 말?

답변

3

성능이 크게 향상되지 않습니다. 다른 방법이 있다면. UIImage를 사용하여 이미지를로드하면 캐스팅의 장점을 얻을 수 있으며 다양한 CALayers와 함께 사용하는 것이 매우 빠릅니다.

+1

나는 Shark가 당신의 친구라고 여기에 덧붙일뿐입니다. 코드 성능을 향상시킬 위치를보고 싶다면 프로필을 작성하고 어둠 속에서 찌르지 않고 시간을 실제로 소비하는 위치를 확인하십시오. – NilObject

-3

확실한 대답은 없지만 CGImage를 사용할 때보다는 UIImage를 사용할 때 느린 로딩 시간을 보게 될 것이라고 생각합니다. CGImage를 사용하면 생성하는 동안 이미지 유형 (jpg 또는 png)을 지정하지만 UIImage를 사용하면 객체 유형을 동적으로 결정해야합니다. 틀림없이 이것은 아마도 이미지 파일의 처음 몇 바이트를 보는 것만 큼 간단하지만 그렇지 않을 수도 있습니다.

일단 이미지가 실제로 사용 중이면 내부적으로 UIImage를 나타내는 CGImage와 자신이 만든 CGImage를 사용하는 것 사이에 차이가 있다고 상상할 수 없습니다. 나는 그들이 정확히 같을 것이라고 생각한다.

+0

첫 번째 사항에 관해서는 PNG와 JPG의 차이점을 감지하는 것이 거의 즉시입니다. 이 유형들 각각은 빠른 비교를 통해 파일 유형을 판별 할 수 있도록 파일 앞쪽에 마법 코드를 가지고 있습니다. – NilObject

+0

그래, 그게 내가 언급 한 것이지만, 필자는 실제로 애플이 파일 형식 결정을 어떻게 구현하는지 알지 못하기 때문에 결정을 내리는 방식이라고 말할 수는 없다. 아, 물론 이미지 유형에 따라 로딩 시간이나 첫 렌더링 시간에 큰 차이가 있습니다. 일부 이미지 유형은 다른 이미지 유형보다 더 빨리 해독 할 수 있습니다. –

1

나는 이것을 시도하고 UIImage를 사용하는 대신 이미지를로드하기 위해 순수 CoreGraphics를 사용하여 한 번에 많은 이미지를로드 할 때 눈에 띄는 속도 향상을 보였습니다.

-1

"나는 이것을 시도하고 UIImage를 사용하는 대신 이미지를로드하기 위해 순수한 CoreGraphics를 사용하여 한 번에 많은 이미지를로드 할 때 눈에 띄는 속도 향상을 보였습니다."

UIImage 사용을 어떻게 피하셨습니까? 더 정확하게 말하자면 UIImage를 거치지 않고 이미지 파일을 CoreGraphics에 직접로드하는 방법은 무엇입니까?

-1

UIImage -imageNamed:을 사용하여 이미지를로드하지 않는 이유 중 하나는 이미지가 내부 캐시에 저장되고 메모리가 부족한 상태에서 캐시가 지워지지 않기 때문입니다.

+0

-1 메모리가 부족한 동안 캐시가 제거됩니다. 대부분 NSCache를 내부적으로 사용하며, 많은 메모리 시나리오를 처리합니다. NSCache의 문서보기 ... – bentford

관련 문제