2012-10-15 3 views
0

목표 C에서 변수 초기화에 대한 설명을 찾고 있습니다.목표 C 할당 할시기 및 초기화 설명

배열을 반환하는 메서드가 있습니다.

-(NSMutableArray *) getArray 
{ 
    NSMutableArray *arr = [[NSMutableArray alloc]init]; //line A 

for(int i = 0; i < 10; i++) 
{ 
    [arr addObject:@"word"]; 
} 

return arr; 
} 

그리고이 메소드를 호출합니다.

NSMutableArray *myArray = [[NSMutableArray alloc]init]; //line B 
       myArray = [self getArray]; 

그렇다면 두 줄 A와 B, 둘 다 아님, 또는 A 또는 B에서 메모리를 할당해야합니까? 대안이 단순히 있습니다

NSMutableArray *arr;  //replacing line A 
NSMutableArray *myArray; //replacing line B 
+0

ARC로 실행 중인지 여부를 결정해야합니다. –

+0

ARC를 사용하고 있습니다. –

+0

또한 포인터/참조 선언과 개체 할당의 차이점을보다 명확하게 이해해야합니다. 당신은 혼란스러워하는 것 같습니다. –

답변

1

하나의 배열에 대해 메모리를 할당하고 한 번 초기화해야합니다.

시작하려면 결국 대체 제품이 작동하지 않음을 의미합니다. 이 두 변수가 존재하고 배열을 가리키고 있지만 생성하고 할당하는 것은 아무것도하지 않는다고 선언하고 있습니다.

라인 B는 배열을 생성하고 초기화하지만 그 결과는 getArray의 결과를 동일한 변수에 할당함으로써 즉시 참조를 잃습니다. ARC 메모리 관리를 사용한다면 약간 낭비입니다. ARC가 없으면 메모리 누수가 발생합니다.

라인 A는 또한 배열을 올바르게 만들고 초기화합니다. 게시 한 코드는 myArray 옆의 작업에 영향을받습니다.

1

당신은 메모리를 할당하지만,에해야

(- - NSMutableArray *arr처럼 같은 이름 개체 자체보다는 실제 개체에 대한 생각할 수 있습니다 당신이 변수로 선언하는 일이 기억하십시오.) B. 의 alloc/init은을 참조하는 변수 arr이 인 개체를으로 만듭니다. getArray 메소드의 반환 값으로 해당 객체를 전달합니다.

B에서는 myArray가 반환 된 객체를 참조하기 만하면 새 객체를 갖고 싶지 않습니다. 다음을 수행하는 경우 :

첫 번째 줄은 새 개체를 만들어 myArray에 할당합니다. 두 번째 줄은 myArray의 해당 값을 메서드에서 반환 된 다른 객체로 즉시 대체합니다. ARC (자동 참조 카운팅)가 없으면 첫 번째 줄에서 생성 된 개체의 메모리 누수가 발생합니다.