2

는 그래서 같은 NSMutableArray을 반환하는 메소드를 호출 내 코드의 섹션이 :클래스 메서드에서 반환 된 배열을 해제하려면 어떻게해야합니까?

그것은 나에게 누출이 호출 할 때마다 제공
+(NSMutableArray *)method { 

NSMutableArray *rgb = [[NSMutableArray alloc] initWithObjects:....., nil]; 

    return rgb; 

} 

. [rgb release];return 뒤에 붙여도 작동하지 않는 것 같습니다. return 앞에두면 내 앱이 다운됩니다. 또한 autorelease을 입력하면 내 앱이 다운됩니다. 제안? 또한

답변

7
+(NSMutableArray *)method { 
    NSMutableArray *rgb = [[NSMutableArray alloc] initWithObjects:....., nil]; 
    return [rgb autorelease]; 
} 

이 여전히 충돌하는 경우

+(NSMutableArray *)method { 
    NSMutableArray *rgb = [NSMutableArray arrayWithObjects:....., nil]; 
    return rgb; 
} 

는 다음 문제는 대부분 그 방법 이외의 것,하지에 있습니다.

+0

두 가지 모두 충돌을 일으 킵니다. 해결책이 무엇인지 잘 모릅니다. 문제가 발생하지 않고 어디서든 어레이를 출시 할 수 있습니다. 다른 가능한 솔루션? 그것은 당신이 아는 한 옵션이 아니거나 그것도 누수되는 물건입니다. – Andrew

+0

배열 자체가 아니라 내부의 일부 객체가 누출되었다고 생각합니다. – Max

+0

배열은 다음과 같습니다 :'NSMutableArray * rgb = [[NSMutableArray alloc] initWithObjects : [NSNumber numberWithInt : redInt], [NSNumber numberWithInt : greenInt], [NSNumber numberWithInt : blueInt], ' – Andrew

4

그러나이 때마다 누수가 발생합니다 ( ). [rgb release] 퍼팅; 반환 후 이 작동하지 않는 것 같습니다. 반환하기 전에 그것을 두는 것은 내 애플 충돌을 만든다. 또한 autorelease에 넣어 내 응용 프로그램이 충돌합니다. 제안?

Cocoa Memory Management Guidelines을 읽어야합니다. 다른 방법

+(NSMutableArray *)method { 
    NSMutableArray *rgb = [[NSMutableArray alloc] initWithObjects:....., nil]; 

    return [rgb autorelease]; 
} 

또는 : 그것은 그와 같은 방법은 반환 된 개체 autorelease를해야한다는 것이 매우 명확하게

+(NSMutableArray *)method { 
    NSMutableArray *rgb = [NSMutableArray arrayWithObjects:....., nil]; 

    return rgb; 
} 

을 과도하게 유지 충돌이 발생하지 않습니다 (코드에서처럼) (최소한 메모리가 부족할 때까지). 충돌이있는 경우 다른 방법으로 메모리를 잘못 관리하기 때문에 가능성이 큽니다.

빌드 및 분석을 사용하여 식별 한 모든 문제를 분석하고 수정합니다. 그래도 충돌이 발생하면 이유를 파악할 수없는 경우 충돌의 백 트레이스를 게시하십시오.

+0

두 가지 방법을 모두 시도했는데 잘못된 액세스 충돌이 발생하여 main.m으로 연결됩니다. – Andrew

+1

예 - 놀랄만한 일이 아닙니다 - 다른 곳에 버그가 있습니다. 내가 보여준 두 가지 구현은 정확합니다. 당신은 다른 곳에서 객체를 과도하게 공개 할 가능성이 있습니다. – bbum

관련 문제