저는 Objective C를 처음 사용합니다. 포인터 개념을 포함하여 C에 대한 기본 지식이 있습니다. 두 가지 기본적인 질문이 있습니다.
- 누군가가 할당, 복사 및 유지의 차이점을 비유로 설명 할 수 있습니까?
- 포인터 변수를 반환하는 함수를 어떻게 처리하고 반환 포인터를 통해 메시징을 수행합니까?
답변:
변경된 문서에 대한 업데이트 된 답변
정보는 이제 문서의 여러 가이드에 분산되어 있습니다. 다음은 필수 읽기 목록입니다.
이제이 질문에 대한 답은 전적으로 ARC 관리 애플리케이션 (새 프로젝트의 최신 기본값)을 사용하는지 아니면 수동 메모리 관리를 강제하는지에 따라 달라집니다.
Assign vs. Weak- 객체를 유지하거나 큐레이팅하지 않고 속성의 포인터를 객체의 주소로 설정 하려면 assign 을 사용 합니다 . 할당 된 객체가 할당 해제 된 경우 속성이 자동으로 nil을 가리 키도록 하려면 weak 를 사용하십시오 . 대부분의 경우 weak 를 사용하기를 원할 것이므로 EXC_BAD_ACCESS
적절한 정리를 수행하지 않으면 할당 해제 된 객체 (메모리 주소의 불법 액세스- " ") 에 액세스하려고 하지 않습니다.
Retain vs. Copy- 선언 된 속성 은 기본적으로 유지 를 사용 하고 (따라서 간단히 모두 생략 할 수 있음) 다른 개체가 속성에 할당되거나 nil로 설정되어 있는지 여부에 관계없이 개체의 참조 횟수를 자동으로 관리합니다. copy 를 사용 하여 새로 할당 된 객체에 자동으로 -copy
메시지를 보냅니다 (전달 된 객체의 사본을 생성하고 대신 속성에 해당 사본을 할당합니다. 할당 된 객체가 다음과 같이 설정된 후 수정 될 수있는 일부 상황에서 유용 (필수)) 다른 객체의 속성 (수정 / 변형이 속성에도 적용됨을 의미 함)
iOS 참조 라이브러리 의 메모리 관리 프로그래밍 가이드 에는 유추 및 예제와 함께 할당, 복사 및 유지의 기본 사항이 있습니다.
copy 개체의 복사본을 만들고 보유 개수 1로 반환합니다. 개체를 복사하면 복사본을 소유하게됩니다. 이는 "copy"가 반환되는 객체를 나타내는 copy라는 단어를 포함하는 모든 메서드에 적용됩니다.
보유 오브젝트의 보유 수를 1만큼 증가시킵니다. 오브젝트의 소유권을 가져옵니다.
release 개체의 보유 횟수를 1만큼 줄입니다. 개체의 소유권을 포기합니다.
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"First",@"Second", nil];
NSMutableArray *copiedArray = [array mutableCopy];
NSMutableArray *retainedArray = [array retain];
[retainedArray addObject:@"Retained Third"];
[copiedArray addObject:@"Copied Third"];
NSLog(@"array = %@",array);
NSLog(@"Retained Array = %@",retainedArray);
NSLog(@"Copied Array = %@",copiedArray);
array = (
First,
Second,
"Retained Third"
)
Retained Array = (
First,
Second,
"Retained Third"
)
Copied Array = (
First,
Second,
"Copied Third"
)
양수인
부:
유지 :