2011-05-04 3 views
1

이 문제를 해결하기 위해 노력하고 있습니다. 기본적으로 편의 RGB UIColor 함수를 사용하여 UIColor를 반환하여 UINavigationBar, UIToolbar 및 다른 객체에 색을 입 힙니다. 그러나 인스 트루먼 트의 어떤 이유로 UIView를로드 할 때마다 메모리 누수가 계속 발생합니다. 어떤 도움을 주시면 감사하겠습니다. 명확성을 위해 여기에 코드를 단순화했습니다.UIColor 메모리 누출 문제

나는 ViewWillAppear이 설정 내 RootViewController에서
- (UIColor *)returnSelectedColor{ 
    return [UIColor colorWithRed:(100)/255.0 green:(100)/255.0 blue:(100)/255.0 alpha:(1.0)]; 
} 

가 (때로는 색조 내가 그러나 호출 사이에서 변경할 수 있습니다 여기에 글로벌 싱글 톤 클래스에 있습니다 내 기능 (함수가 변수로 RGB와 알파가 있습니다)입니다 ViewDidLoad 시도했지만 문제가 여전히 있었다). 이 문제를 해결하기 위해 두 가지 다른 방법을 시도했지만 누출은 여전히 ​​존재합니다. 도면은 다음과 같이 나타날 때

첫 번째 방법은 색조를 설정 막이었다 번째 방법은,보기의 UIColor 속성을 생성 하였다 원하는 UIColor로 설정하고 내비게이션 바 설정

self.navigationController.navigationBar.tintColor=[[GlobalData sharedGlobalData] returnSelectedNavigationColor]; 

보기가 닫히면이 속성에 색조가 적용됩니다. 이 접근 방식은 또한 메모리 누수의 원인이됩니다. 코드는 다음과 같습니다.

if(self.navigationToolbarColor!=nil){ 
     [self.navigationToolbarColor release]; 
    } 
    self.navigationToolbarColor=[[[GlobalData sharedGlobalData] returnSelectedNavigationColor] retain]; 

self.navigationController.navigationBar.tintColor=self.navigationToolbarColor; 

아무 문제가있을 수 있습니다 아이디어가 있습니까? 미리 감사드립니다.

답변

1

여기서 문제는 과도하게 유지이 라인에있어 있도록 가능성이 보관 된 속성으로 navigationToolbarColor 가지고있다 :

self.navigationToolbarColor=[[[GlobalData sharedGlobalData] returnSelectedNavigationColor] retain]; 

retain에 대한 호출을 제거하기와 모든 좋은되어야 .

+0

답장을 보내 주셔서 감사합니다. 그러나 나는 여전히 동일한 메모리 누출을 얻으려고 노력했다. 내가 사용한 첫 번째 접근 방식은 속성이없는 유지가없고 메모리 누수가 발생합니다. 내가 제안한대로 유지하지 않고 속성을 사용하여 시도하고 또한 메모리 누수가 있습니다.방금 뭔가 생각했습니다. 내 함수가 싱글 톤 객체에 있기 때문에 가능합니까? –

+0

아니, 그게 아니야. 함수를 호출하는 대신 직접이 작업을 시도했지만 여전히 메모리 누수가 발생합니다. self.navigationToolbarColor = [UIColor colorWithRed : (39) /255.0 green : (64) /255.0 blue : (139) /255.0 alpha : (1.0)] ; 내비게이션 컨트롤러의 색조에 UIColor를 할당 한 후 어딘가에 UIColor를 릴리스해야합니까? 나는 그것이 자동 해제 된 객체라고 가정 된 이후로 필요하다고 생각하지 않았다. 모든 단서 또는 아이디어가 도움이 될 것입니다. –

0

기본적으로 UIColor 개체에 범주를 추가하여 해결책을 찾았습니다. 이것은 메모리에 머무르는 내 사용자 정의 색상 객체를 만듭니다. 이런 식으로 다른 색으로 다른 색조를 설정하면 더 이상 메모리 누수가 발생하지 않습니다. 다음은 동일한 문제가 발생한 경우의 샘플 코드입니다. 여기

는 CustomColors.m 파일 다음

#import "CustomColors.h" 

@implementation UIColor (CustomColors) 

    + (UIColor *)standardColor{ 
     static UIColor *customColor = nil; 

     if (!customColor){ 
      customColor = RGBCOLOR(135,153,188,1.0); 
      [customColor retain]; 
     } 
     return customColor; 
    } 

CustomColors.h 파일 여기

#define RGBCOLOR(r,g,b,a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(a)] 

@interface UIColor (CustomColors) 

+ (UIColor *)standardColor:(int)selectedAlpha; 

@end 

입니다 I 할당 할 수있는 모든 내 의견에 # import를 "CustomColors.h"를 포함하여 후 이처럼 내 색상 :

self.navigationController.navigationBar.tintColor=[UIColor standardColor]; 

@end

그리고 그게 전부입니다. 이제 메모리 누수없이 UIColors를 즐길 수 있습니다.

+1

이 솔루션에 대해 적극 권장합니다. 내 대답에 대한 답을보십시오. –

0

정적 솔루션은 당신이하고 싶은 것이 아닙니다. 당신은 그런 식으로 진짜 문제로 거짓 긍정적 인 문제를 고치고 있습니다. 솔루션을 참조하십시오 iphone - UIColor leaking... need to release the object?

"누출"에 대해 걱정하지 마십시오. 괜찮습니다.