Copy & MutableCopy

2436 단어

1. 비컬렉션 클래스 객체에 대한 copy 작업:


비집합 클래스 대상 중:immutable 대상에 대해copy작업을 하고 바늘 복제,mutable Copy작업 시 내용 복제;mutable 대상에 대한 copy와mutable Copy는 모두 내용을 복제합니다.코드는 다음과 같이 간단히 나타냅니다.
  • [immutableObject copy]//얕은 복제
  • [immutableObject mutableCopy]//깊이 복사
  • [mutableObject copy]//딥 클로닝
  • [mutableObject mutableCopy]//깊이 복사
  • 예를 들어 다음 코드:
    NSMutableString *string = [NSMutableString stringWithString:@"origin"];//copy
    NSString *stringCopy = [string copy];
    

    메모리를 보면string,stringCopy 메모리 주소가 모두 다르다는 것을 알 수 있습니다. 이것은 모두 내용 복사, 깊이 복사를 하는 것을 의미합니다.다음 작업을 수행해도
    [string appendString:@"origion!"]
    

    stringCopy의 값도 이로 인해 바뀌지 않지만,copy를 사용하지 않으면,stringCopy의 값은 변경됩니다.집합 클래스의 대상은 이렇게 유추한다.그래서
    @property로 NSString, NSArray, NSDictionary가 자주 copy 키워드를 사용하는 이유는 대응하는 가변 유형이 있기 때문이다. NSMutable String, NSMutable Array, NSMutable Dictionary이다. 그들 사이에는 값을 부여하는 작업이 있을 수 있다. 대상의 문자열 값이 무의식적으로 변동되지 않도록 새로운 속성 값을 설정할 때 복사해야 한다.

    2. 클래스 개체의 copy 및 mutableCopy 컬렉션


    컬렉션 클래스 객체는 NSArray, NSDictionary, NSSet...그런 상대.다음은 집합 클래스 immutable 대상이 copy와mutable Copy를 사용하는 예를 보십시오.
    NSArray *array = @[@[@"a", @"b"], @[@"c", @"d"]];
    NSArray *copyArray = [array copy];
    NSMutableArray *mCopyArray = [array mutableCopy];
    

    내용을 보면 copyArray와 array의 주소는 같고 mCopyArray와 array의 주소는 다르다는 것을 알 수 있다.설명 copy 작업은 포인터 복사를 했고,mutable Copy는 내용 복사를 했습니다.그러나 강조해야 할 것은 이곳의 내용 복사는 단지 array라는 대상을 복사하는 것일 뿐이고array 집합 내부의 요소는 여전히 지침 복사이다.이것은 위의 비집합immutable 대상의 복사와 매우 비슷하다. 그러면mutable 대상의 복사는 유사하지 않을까?우리는 계속해서 아래로mutable 대상 복사의 예를 보았다.
    NSMutableArray *array = [NSMutableArray arrayWithObjects:[NSMutableString stringWithString:@"a"],@"b",@"c",nil];
    NSArray *copyArray = [array copy];
    NSMutableArray *mCopyArray = [array mutableCopy];
    

    메모리를 보십시오. 예상한 바와 같이,copyArray, mCopyArray,array의 메모리 주소가 모두 다르다는 것은,copyArray,mCopyArray가 모두array에 대해 내용을 복사했다는 것을 설명합니다.마찬가지로 우리는 결론을 얻을 수 있다.
    집합 클래스 대상에서immutable 대상을copy하는 것은 지침 복제이고mutable Copy는 내용 복제이다.mutable 대상에 대한 copy와mutable Copy는 모두 내용을 복제합니다.그러나: 컬렉션 객체의 컨텐트 복사는 객체 자체에 한정되며 객체 요소는 여전히 포인터로 복사됩니다.코드는 다음과 같이 간단히 나타냅니다.
    [immutableObject copy] //    
    [immutableObject mutableCopy] //     
    [mutableObject copy] //     
    [mutableObject mutableCopy] //     
    

    이 코드의 결론은 비집합류와 매우 비슷하다.

    좋은 웹페이지 즐겨찾기