2012-08-28 4 views
0

왜 Xcode Analyzer (v4.2)가 내 objective-c 코드가 메모리를 누설한다고 불만을 토로했는지 분석하려고 노력했습니다. NSOperation을 만드는 중입니다. 1) 존재하지 않으면 재귀 적으로 디렉토리를 생성하고, 2) 한 디렉토리에서 다른 디렉토리로 파일을 복사합니다. 첨부코코아 코드의 메모리 누수

- (id)initWithFullPathSource:(NSString *) mysource andFullPathCopy:(NSString *) mycopy  andNewDirectory:(NSString *) mydir withMode:(NSString *) mymode withLR:(NSString *) LR 
{ 

    self = [super init]; 
    if (self) { 

     [self setFullPathSource:mysource]; 
     [self setFullPathCopy:mycopy]; 
     [self setNewDirectory:mydir]; 
     [self setMode:mymode]; 
     [self setMyLR:LR]; 
    } 

    return self; 
} 

엑스 코드 분석기 내 코드를 보는 방법에 대한 스크린 샷입니다 :

NSOperation은 초기화됩니다. 아무도 내가이 사건에서 왜 메모리를 새기고 있는지 이해할 수 있도록 도와 주실 수 있습니까? 메인 루틴의 끝에서 'createComponents'와 'removeComponents'를 풀어서 내가 분명하다고 생각했습니다.

누군가 내 문제를 밝힐 수 있기를 바랍니다. 감사! 건배, 트론

enter image description here

+0

'[self newDirectory]'는 무엇을 반환합니까? – ohr

+0

'newDirectory'도 정의하는 NSOperation을 초기화하는 데 사용 된 메서드를 추가했습니다. –

+1

속성 인 경우 @danielbeard가 말하는 것은 정확합니다. – ohr

답변

7

은 알고 있어야 그 이름 지정 규칙 C 목적, new 또는 copy가 호출 측이 소유하는 개체를 반환 가정 단어로 시작하는 방법에 따라. [self newDirectory]에 대한 호출이 자동 렌더링 된 객체를 반환하는 경우 새 객체로 시작하지 않도록 이름을 바꾸어보십시오.

은 훌륭한 대답은 더 여기에 설명이되어 Semantic Issue: Property's synthesized getter follows Cocoa naming convention for returning 'owned' objects

제안을하는 것 중과 같이 재산에 게터의 이름을 변경 : directoryToBeCreated을 : 같은 것을

@property (strong, nonatomic, getter=theNewDirectory) NSString *newDirectory; 

를하거나 전화

+0

감사합니다! 내 재산을 다른 이름으로 변경하자마자 문제가 해결되었습니다. 나는이 특별한 명명 규칙에 관해 몰랐다. 그래서 이것은 정말로 도움이되었다! –