2011-02-12 2 views
1

Preamble : 내가보기에는 뷰 컨트롤러의 뷰가 UISplitViewController에서 세부 뷰로 사용됩니다. 사용자가 분할보기의 UINavigationController를 사용하여 탐색하면 대체됩니다. "Back"을 누르면, 문제가있는 뷰 컨트롤러의 새로운 인스턴스가 생성되어 분할 뷰 컨트롤러 컨트롤러 배열에 할당됩니다. 내보기가 표시 될 때마다 인스 트루먼 트에서 8MB 블록이 할당 된 것을 볼 수 있습니다. 잠시 앞뒤로 탐색하면 결국 앱이 다운됩니다. 상세이미지를 사용하는 경우 UIView.BackgroundColor 누수가 발생합니까?

:

내 클래스 최우선의 UIViewController에서

내가 가지고 : viewDidLoad에()에서

private UIColor oBgColor = null; 

:

this.oBgColor = UIColor.FromPatternImage (UIImage.FromFile ("Data/Images/background.jpg")); 
// This line here causes memory to go up by 8MB! 
    this.View.BackgroundColor = this.oBgColor; 

ViewDidDisappear()에서 :

// These lines should sucessfully get rid of the allocated 8MB chunk.  
this.View.BackgroundColor = UIColor.Clear; 
    this.oBgColor.Dispose(); 
    this.View.Dispose(); 

코드 도달 범위 ViewDidDisappear() 예상대로,보기 사라졌습니다.

8MB 블록은 this.oBgColor를 뷰의 BackgroundColor에 할당하는 경우에만 할당됩니다. 그 라인을 남겨두고 모든 작품 (하지만 배경이 없습니다). 보기가 표시 될 때마다 낭비되는 또 다른 8MB가 표시됩니다.

여기 무슨 일 이니? BackgroundImage가 새는 것으로 알려져 있습니까?

흥미로운 사이드 노트 : UIImageView를 하위보기로 추가하고보기 BackgroundColor 속성에 할당하는 대신 이미지를 사용하면 메모리가 거의 올라 가지 않고 제대로 릴리스됩니다.

답변

1

코드를 기반으로 샘플을 작성했으며 할당시 메모리 사용량이 올라 갔지만 누출은 없었습니다 (이미지를 100 번 켜고 껐고 메모리가 변경되지 않음).

BackgroundImage 속성이 Objective-C의 @property에 의해 뒷받침되므로 전체 개체가 할당시 복사되므로 거대한 패턴 이미지가있는 경우 할당해야합니다. 당신은 짧은 기간 동안 메모리에 2 개의 이미지 복사본을 갖게 될 것입니다.

메모리 증가가 나타나는 이유는 IRC에서 설명했듯이 MonoTouch에는 v3에 압축 GC가 없습니다.

+0

알 수 있습니다. 그러나 그것은 왜 내 앱이 죽을지를 설명하지 못한다. 분할보기 컨트롤러에서 세부보기와 같이 배경 이미지가있는보기를 계속 설정하려고 했습니까? 이 다음 내 시나리오를 정확하게 될 것이다 : 단추를 클릭하고 UIViewController oImageController = new ImageControllerWithAViewHavingABgImage(); SplitViewController.ViewControllers = 새로운 UIViewController [] {SplitViewControll.ViewControllers [0], oImageController} – Krumelur

+0

또한 내 dev 환경에서 일반적인 문제가있을 수 있습니다. 심지어 특별한 테스트없이 새로운 테스트 응용 프로그램을 만들었습니다. 창문 하나도 없어요. StringReader를 사용하여 큰 파일을 한 줄씩 읽습니다. 10 번 중 9 번 모두 괜찮습니다. 그런 다음 앱을 다시 시작하면 메모리가 최대 160MB로 돌면서 앱이 종료됩니다. 나는 무슨 일이 벌어지고 있는지 전혀 모른다. 여기에 MT 팀의 누군가가 문제를 해결하고 한 번 영원히 해결해 주었으면 좋겠습니다.이 문제로 인해 프로젝트에 진전이 없었습니다. – Krumelur

+0

이미지 문제에 대한 자체 테스트 케이스를 게시하십시오. –

관련 문제