iOS copy 및 mutable Copy 학습

3661 단어
(iOS 52개 기교 학습 소감노트 제2장 대상, 소식, 운행기 참조)의 대상 부분
"Copy에 대한 고전적인 질문이 있습니다."대부분의 경우 NSString의 속성은 copy인데 copy와 strong의 경우 도대체 어떤 차이가 있을까요?"또는"왜 NSString 유형 구성원 변수의 수식 속성은 strong(또는 retain)이 아닌 copy를 사용합니까?"
분명히 첫 번째 문장이 두 번째 문장보다 훨씬 엄격하다.
@property (strong,nonatomic) NSString *strongString; & @property (copy,nonatomic) NSString *copyString;
정확하게 이해하는 것은 이 두 가지 표현 방식을 구분하는 차이이다
쓰기 방법에 따라 권한이 다르고 안전 등급이 다르다.
(1) 일반적인 NSString이 copyString과 strongString에 값을 부여하는 것과 다를 것이 없다면 copy는 얕은 복사이고 양자에 대한 값은 지침 참조이다
(2) 가변 문자열인 NSMutable String이 copy String 및 strong String에 부여된 경우 copy String의 경우 복제는 원본의 변화에 따라 달라지지 않습니다.strongString 또는 얕은 복제는 포인터 참조가 원본의 변화에 따라 달라집니다
 
둘째, copy와mutableCopy
copy는 얕은 복제, 간단한 지침 인용, 원천의 변화에 따라 변화
multableCopy는 심층 복제이며, 원본의 변화에 따라 새로운 대상을 만들었습니다.
     Runtime NSMutableString.m 

-(id)copy {
    return [[NSString alloc] initWithString:self];
}

  -(id)copyWithZone:(NSZone*)zone {
    return [[NSString allocWithZone:zone] initWithString:self];
}
  NSObject.mm 

- (id)copy {
    return [(id)self copyWithZone:nil];
}
- (id)mutableCopy {
    return [(id)self mutableCopyWithZone:nil];
}

NSString.m 

- (id)copyWithZone:(NSZone *)zone {
   if (NSStringClass == Nil)
        NSStringClass = [NSString class];
    return RETAIN(self); 
}
- (id)mutableCopyWithZone:(NSZone*)zone {

    return [[NSMutableString allocWithZone:zone] initWithString:self];
}

이로써 알 수 있듯이 가변 유형에서copy도 깊이 복제되었지만 유형은 일반 유형이 되어 집합 요소를 더 이상 증가하거나 줄일 수 없습니다
일반 형식에서mutableCopy를 사용해도 깊이 복사됩니다. 형식이 가변 형식으로 바뀌었습니다.
 
NSString *haha = @"hahahhahahah";
NSLog(@"%p
%p",haha,[haha mutableCopy]);

2016-08-15 17:42:09.843 dailylife[69904:5024325] 0x10f6fa390
0x7f8079c41f80
Printing description of haha:
hahahhahahah
Printing description of haha:
hahahhahahah
Printing description of haha:
(NSMutableString) NSMutableString = {
  NSString = {
    NSObject = {
      isa = __NSCFConstantString
    }
  }
}
 
 
 
동일: NSString NSArray NSDictionary
 
 
참조:
https://searchcode.com/file/68838008/jni%20w:%20itoa%20runtime%20and%20allocator/Foundation/NSMutableString.m
http://ios.jobbole.com/87987/
 
전재 대상:https://www.cnblogs.com/someonelikeyou/p/5773683.html

좋은 웹페이지 즐겨찾기