2010-06-18 6 views
1

여러 어레이가 있지만 다른 방법으로 사용하기 위해 데이터가 유지되지 않습니다. 여기목표 -C/코코아 손실 배열 값

내가 그것을 (간체) 설정 한 방법입니다 array 때마다 당신이었다 당신이 무엇을 누설 것이다는 사실을 제외하고

.h

NSArray *array; 
@property (nonatomic, copy) NSArray *array; 
-(void)someMethod:(NSArray*)someArray; 
-(void)heresNewMethod; 

.m

-(void)someMethod:(NSArray*)someArray 
{ 
array = [someArray copy]; 
} 
-(void)heresNewMethod //gets called by method not shown 
{ 
    NSLog(@"%@", array); 
} 
+2

현재 직면하고있는 실제 문제는 무엇입니까? Btw, 이전 배열의 메모리가 누출되지 않도록 someArray의 복사본을 저장하기 전에 [배열 릴리스]를 호출해야합니다. – MKroehnert

답변

7

하나는 무슨 일이 있었 :

  • 당신은 (아마도에 의미없이) nil를 전달 대상에게 someMethod: 메시지를 보냈습니다. nil에 대한 메시지는 nil을 반환하므로 copy 메시지의 결과 인 nilarray 인스턴스 변수에 할당했습니다. 이전에 배열에 대한 포인터를 숨긴 경우에도이 someMethod: 메시지에 대한 응답으로 nil으로 바 꾸었습니다.
  • 메시지를 보내지 않은 메시지는 someMethod:입니다. 인스턴스 변수는 nil으로 초기화되고 array 인스턴스 변수에 다른 값을 입력하지 않으므로 여전히 nil을 포함합니다.

코드에 NSLog 문을 더 뿌려서 첫 번째 이론을 테스트하십시오. 진실은 하나 또는 다른 것이므로 첫 번째 이론이 두 번째 이론을 확인하면 두 번째 이론을 입증하고 그 반대의 경우도 마찬가지입니다.

+0

모두가 썩을 것입니다. –

0

someMethod:으로 전화하면 해당 코드가 작동합니다. 네가 보는 문제가 뭐니? 두 가지의

+0

heresNewMethod에서 nslog 할 때 배열에 null이 표시됩니다. –

+0

@Matt :'someArray'가 복사되기 전에'null' 또는'nil'가 아닌지 확인 했습니까? – MKroehnert

+0

예. 그것은 아니에요, 데이터가 있습니다. –

0

유일한 대답은 제공 한 코드가 사용하는 코드가 아니며 그 차이가 중요하다는 것입니다. 내 말은, 당신이 사용하지 않는 속성을 선언한다는 것입니다. 접근자를 제대로 정의하고 있는지 또는 배열이 속성을 섀도 잉하고있는 지역인지 여부는 분명하지 않습니다.

실제 코드를 게시하십시오.

+0

은 중요하지 않습니다. 피터 호세이에게이 문제를 해결했습니다. –