2016-11-30 3 views
1

내가 내 projectInstruments에서 테스트, 그리고 마지막으로 내가 UIView에서의 카테고리 memory leak을 발견 UIView+RSAdditions메모리 누수 :

The memory leak

아래 코드 :

- (void)setHeight:(CGFloat)height { 
    CGRect frame = self.frame; 
    frame.size.height = height; 
    self.frame = frame; // this code cause memory leak 
} 

I을 내 project을 검색하여 동일한 메소드 이름을 찾았습니다.

The method name is the same

동일한 방법으로 메모리 누출이 영향을 줍니까? 그리고 난 memory leak의 이유에 대해 혼란스러워합니다.

답변

0

내 경험에 따르면. 어떤 계통이 누출을 일으키는 지 알 수는 없습니다. 라인이 누설의 원인이되는 스택 트레이스 중 하나에 포함되어 있다고 알려줍니다. 프로그램이 어떻게 진행되는지 알기 때문에 누출을 쉽게 추적하는 데 도움이됩니다. 장비가 제공 한 스택 추적에서 자신의 기지를 추적해야합니다. 내 이전 디버깅에서

enter image description here

이 내 실수는 강한 참조로 설정 ARC

  • 에서 메모리 누수가 발생합니다 여기

    악기에서 스택 추적의 샘플 스크린 샷입니다 child 객체의 부모 이로 인해 주기가 유지됩니다.
  • 인터페이스에서 대리인에 대한 강력한 참조를 설정합니다.
  • 소유권을 이전 한 후 수신자 부담 브리징을 할 때 개체를 놓는 것을 잊었습니다.
  • 블록에 전달 된 개체에 약한 참조를 설정하는 것을 잊어 버렸습니다.

나는 그의

+0

무엇을 의미 도움이되기를 바랍니다 'owenership' 전송 후 무료 브리징을합니까? – aircraft

+0

@aircraft 예를 들어 NSArray를 CFArrayRef로 캐스팅하고 유지하려고합니다. CFArrayRef arrayRef = (__bridge_retained) anNSArray; 이제 당신이 그것을 지키고 있기 때문에. CFRelease() 나 뭐 그런 것 같이 직접 풀어 줘야합니다. –