copy와mutableCopy의 깊이, 얕은 복사
2531 단어 table
NSMutableArray *arrayCopy=[muArray copy];
copy는 인용된 대상이 가변적일 때 깊이 복사하고, 가변적일 수 없는 대상일 경우 얕은 복사입니다.mutableCopy는 객체가 가변적이든 아니든 깊이 복사됩니다.
int main(int argc, const char * argv[])
{
NSMutableArray *muArray=[[NSMutableArray alloc] init];
// ClassA ,
ClassA *a=[[ClassA alloc] init];
[muArray addObject:a];
NSMutableArray *arrayCopy=[muArray copy];// add object: , ( )
NSMutableArray *arrayMutableCopy=[muArray mutableCopy];
NSLog(@"%p---%p----%p",arrayCopy,muArray,arrayMutableCopy);
[a release];
[muArray release];
[arrayMutableCopy release];
[arrayCopy release];
return 0;
}
출력된 결과는요.
2015-01-23 12:06:58.342 Test[3375:303] 0x100100d40---0x1001023b0----0x100105020
주소가 모두 다르다는 것을 알 수 있다.
int main(int argc, const char * argv[])
{
NSArray *array=@[@1,@2,@3];
NSArray *arrayCopy=[array copy];
NSMutableArray *arrayMutableCopy=[array mutableCopy];
NSLog(@"%p---%p----%p----%ld",arrayCopy,array,arrayMutableCopy,[arrayCopy retainCount]);
[arrayMutableCopy release];
[arrayCopy release];
return 0;
}
출력된 결과는요.
2015-01-23 12:08:40.091 Test[3388:303] 0x100204ae0---0x100204ae0----0x1002054e0----2
코피를 사용하여 나온 대상 주소가 원래 주소와 같다는 것을 알 수 있다. 즉, 사실은 같은 대상이다.인용계수기도 2다.
모든 컨테이너 클래스와 마찬가지로 NSArray에는 여전히 포인터가 들어 있습니다.대상 자체가 아니라, 사실 수조의 모든 요소는 대상의 주소이다.우리가 얕은 복사본을 사용할 때, 우리 대부분은 대상이 공유하는 문제에 주의할 수 있다.예:
int main(int argc, const char * argv[])
{
NSMutableArray *muArray=[[NSMutableArray alloc] init];
// ClassA ,
ClassA *a=[[ClassA alloc] init];
a.val=1;// , val 1
[muArray addObject:a];
NSArray *arrayCopy=[muArray copy];
ClassA *b=arrayCopy[0];
b.val=2;// , val 2
NSLog(@"%ld",[muArray[0] val]);
[a release];
[muArray release];
[arrayCopy release];
return 0;
}
인쇄 결과는 다음과 같습니다.
2015-01-23 12:21:32.972 Test[3443:303] 2
깊이 복사해도 원래의 수조에 영향을 미쳤다.
저장된 주소가 모두 주소이기 때문에 깊이 복사할 때 모든 주소를 복사했지만 같은 대상을 가리켰다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Vuetify에서 행 그룹화이 기사에서는 유사한 값으로 테이블의 행을 그룹화하는 방법에 대한 경험을 공유하고자 합니다. 물론 기본 그룹화 예제를 찾을 수 있지만 제 사용 사례에는 약간의 고급 기능이 필요했습니다. 제품 데이터가 있다고 가정합니...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.