2011-11-06 3 views
2

I이 상황 가지고UIColor -initWithRed : 녹색 : 파란색 : alpha : 메모리 누수?

UIColor *color = [[UIColor alloc] initWithRed:0/255.f green:156/255.f blue:255/255.f alpha:1]; 
self.lightBlue = color; 
color = nil; 
[color release]; 

및 UIColor * 컬러 = [UIColor ALLOC]에 memoery 누수가 나타날는 initWithRed : 0/255.f 녹색 : 청색 156/255.f : 255/255.f 알파 :1];

인스트루먼트 상황 : instruments situation

어떤 아이디어가?

답변

5

로컬 변수 'color'를 nil로 설정하고 아무 것도하지 않는 [nil release]를 수행합니다.

'color = nil'이 정말로 필요한 경우에는 출시 이후에해야합니다.

+0

'[color release], color = nil; 두 문장을 한 줄로 처리하면 해결할 수 있습니다. – Joost

+0

예 [color release]; 내 잘못이 색상이 필요하지 않습니다 = nil; 고맙습니다! – donjordano

1

누수 도구는 누출 된 것이 어디에 할당되었는지 보여줍니다.

그렇다면이 값을 할당 한 후에는 결코 출시되지 못했습니다. 즉, 네비게이션 컨트롤러가 출시 될 때 출시되지 않는다는 의미 인 것 같습니다. 물체를 놓지 마십시오. 물체를 소유하지 않아 결국 충돌이 발생합니다. UIColor는 아마도 이러한 색상을 캐싱하는 것일뿐입니다. Instruments는 이것을 알 수있는 방법이 없으므로 누수 (기본적으로 생성 된 항목 및 더 이상 참조가 없지만 할당이 취소되지 않은 항목)로보고합니다.

시뮬레이터를 사용하여 얼마 동안 계측기를 실행 한 다음 UIColor가 캐시를 제거할지 확인하기 위해 메모리 경고를 보냅니다. 어느 쪽이든, 코어 프레임 워크 내부에서 누수 현상을 수정하기 위해 할 수있는 일이 없으므로 시도하지 마십시오. 그냥 어떤 식 으로든 그들을 유출시키지 않았는지 확인하십시오.

위의 코드가 모두 수행하는 것이라면, color은 확실히 누출되지 않습니다. 그 객체를 놓치지 않고 다른 곳의 객체를 유지한다면, 누수가됩니다.

기억하지 못하는 물건을 놓아 두지 마십시오. 이제까지. 그러나 나는 당신이 단지 어딘가에 그것을 유지하고 있고 그것을 알아 차리지 못한다고 생각합니다.