iOS copy 및 mutable Copy 학습
"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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.