2009-07-03 4 views
1

인스트루먼트는이 코드에서 mem 누수가 있다고 알려주지 만 찾을 수없는 것 같습니다. 어떤 도움이 필요합니까? 미안하거나 초보자 질문. 내가 말할 것여기에 메모리 누수가 어디 있습니까?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    int altoBufferCelda = 26; 
    Mensaje *msg = (Mensaje *)[model.mensajes objectAtIndex:indexPath.row]; 

    CGSize txtSize = [msg.texto sizeWithFont:[UIFont systemFontOfSize:17.0f] constrainedToSize:CGSizeMake(222, 222) lineBreakMode:UILineBreakModeTailTruncation]; 

    [alturasDinamicas setObject:[NSNumber numberWithFloat:(txtSize.height + altoBufferCelda)] forKey:[NSNumber numberWithInt:indexPath.row]]; 

    return txtSize.height + altoBufferCelda;  
} 
+0

어떻게해야할까요? 무슨 일이야? 무슨 "악기"? 더 많은 정보를 제공하면 도움을 줄 것입니다 – marcgg

+0

marcgg, 정보 부족으로 유감스럽게 생각합니다. 이것은 아이폰 용으로 작성된 objective-c 코드입니다. 이 메서드는 아이폰 개발자가 잘 알고있는 GUI 컨트롤을 제어하는 ​​데 사용되는 델리게이트의 일부입니다. 그리고 Instruments는 mem 누수 및 기타 많은 것들을 탐지하는 데 사용되는 개발 도구입니다. – nico

+0

@marcgg 저는 "Instruments"가 개발자 도구에 포함 된 프로파일 링 응용 프로그램이라는 것을 코코아 개발자들 사이에서 꽤 잘 알고 있습니다. 목적에 관해서는 "heightForRowAtIndexPath :"가 충분히 명확하지 않습니까? –

답변

0

: [의 NSNumber numberWithFloat] 그것은 당신을 위해 오토 릴리즈 객체를 할당합니다

. iPhone은 가비지 수집되지 않으며 참조 수집 만 가능합니다. 그리고 메소드를 떠나기 전에 할당하고있는 메모리를 공개하지 않으므로, Instruments는 그것을 누수로보고합니다.

현재 허용되고 있으므로 답변을 변경하겠습니다.

인 스트 루먼트는 신성한 칙령이 아닙니다. 그것은 틀릴 수 있습니다. 당신이 무엇을보아야하는지에 대한 강력한 지침으로 사용하십시오. 그러나 솔직하게 코드에서 잘못되거나 누설 된 것을 찾지 못하면 그냥 계속 진행하십시오.

+0

이 누출을 무시해야합니까? 또는 다른 것을 시도해보십시오. 감사! – nico

+3

그건 맞지 않아. [NSNumber numberWithFloat :]는 자동 렌더링 된 객체를 반환합니다. iPhone에는 GC가 없다는 것이 맞지만 자동 풀이 있습니다. 나는 실제 코드에서 누수가 보이지 않는다. * UIKit 프레임 워크 자체에 누수가있을 수 있습니다. –

+0

자동 복구 풀은 가비지 수집과 다릅니다. 자동 릴리즈 된 오브젝트가 유지되지 않으면 현재 이벤트가 끝날 때 해제됩니다. 이는 iPhone 및 OS X에서 마찬가지입니다. 가비지 콜렉션은 오브젝트가 범위를 벗어나고 다른 오브젝트가없는 경우 오브젝트를 해제합니다 그들에게 접근 할 수있다 (도달 할 수 없다). numberWithFloat는 autoreleased 인 NSNumber 객체를 반환 할 것이므로 위 메서드에서 유지되지 않으므로 해제 할 필요가 없습니다. –

0

코드에서 메모리 누수가 보이지 않습니다. 토스트가 지적했듯이, Instruments는 항상 정확한 것은 아닙니다. 이것은 Apple Frameworks의 코드에도 Instrument에서보고하는 메모리 누수가 포함되어 있기 때문입니다.

XCode 3.2를 사용하는 경우 컴파일러에서 일반적으로 감지되지 않는 오류를 코드에서 검색하는 빌드 메뉴에서 빌드 및 분석을 선택할 수 있습니다. 이렇게하면 객체를 놓치는 것을 잊어 버려서 가능한 많은 메모리 누수가 표시됩니다.

관련 문제