OC 언어-08-심층 복사 및 얕은 복사 상해(예)
개술
Copy 및 Retain
다른 객체의 복제 동작
 NSString)- (void)imutableInstanceCopy
{
    NSString *string = @"Welcome to Xcode";
    //copy,   
    NSString *stringCopy = [string copy];
    //mutableCopy,       
    NSMutableString *stringMutableCopy = [string mutableCopy];
    [stringMutableCopy appendString:@"!"];
    //string stringCopy       
    NSLog(@"string: %p", string);
    NSLog(@"strongCopy: %p", stringCopy);
    //string stringMutableCopy       ,       
    NSLog(@"stringMCopy:%p", stringMutableCopy);
}- (void)mutableInstanceCopy
{
    NSMutableString *mutableString = [NSMutableString stringWithString: @"Welcome to Xcode"];
    //   ,       
    NSString *stringCopy = [mutableString copy];
    NSMutableString *mutableStringCopy = [mutableString copy];
    //   ,     ,    “Attempt to mutate immutable object with appendString:”
    [mutableStringCopy appendString:@"~~~"];
    //   ,      
    NSMutableString *stringMutableCopy = [mutableString mutableCopy];
    [stringMutableCopy appendString:@"!"];
    //   mutableString        
    NSLog(@"mutableString: %p", mutableString);
    NSLog(@"string: %p", stringCopy);
    NSLog(@"mutableStringCopy: %p", mutableStringCopy);
    NSLog(@"stringMutbleCopy:%p", stringMutableCopy);
}NSArray- (void)containerInstanceShallowCopy
{
    NSArray *array = [NSArray arrayWithObjects:[NSMutableString stringWithString:@"Welcome"],@"to",@"Xcode",nil];
    //   
    NSArray *arrayCopy = [array copy];
    //   
    NSMutableArray *arrayMutableCopy = [array mutableCopy];
    NSLog(@"array: %p", array);
    NSLog(@"arrayCopy: %p", arrayCopy);
    NSLog(@"arrayMutableCopy: %p", arrayMutableCopy);
    //          ,           
    NSMutableString *testString = [array objectAtIndex:0];
    [testString appendString:@" you"];
    //           
    NSLog(@"array[0]: %@", array[0]);
    NSLog(@"arrayCopy[0]: %@", arrayCopy[0]);
    NSLog(@"arrayMutableCopy[0]: %@", arrayMutableCopy[0]);
}- (void)containerInstanceDeepCopy
{
    NSArray *array = [NSArray arrayWithObjects:[NSMutableString stringWithString:@"Welcome"],@"to",@"Xcode",nil];
    //          
    NSArray *deepCopyArray = [[NSArray alloc] initWithArray:array];
    //        ,          
    NSArray *trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:array]];
    NSLog(@"array: %p", array);
    NSLog(@"deepCopyArray: %p", deepCopyArray);
    NSLog(@"trueDeepCopyArray: %p", trueDeepCopyArray);
    //  array      
    [[array objectAtIndex:0] appendString:@" you"];
    //   deepCopyArray        
    NSLog(@"array[0]: %@", array[0]);
    NSLog(@"arrayCopy[0]: %@", deepCopyArray[0]);
    //   trueDeepCopyArray        ,          
    NSLog(@"arrayMutableCopy[0]: %@", trueDeepCopyArray[0]);
}@interface Person : NSObject <NSCopying, NSMutableCopying>
/**  */
@property (nonatomic, copy) NSMutableString *name;
/**  */
@property (nonatomic, copy) NSString *address;
/**  */
@property (nonatomic, assign) NSInteger age;
@end- (instancetype)init
{
    if (self = [super init])
    {
        self.name = [[NSMutableString alloc] initWithString:@"XiaoYaowang"];
        self.address = @"    ";
        self.age = 3;
    }
    return self;
}- (id)copyWithZone:(NSZone *)zone
{
    Person *p = [[[self class] allocWithZone:zone] init];
    p.name = [self.name copy];
    p.address = [self.address copy];
    p.age =  self.age;
    return p;
}- (id)mutableCopyWithZone:(NSZone *)zone
{
    Person *p = [[[self class] allocWithZone:zone] init];
    //  ,   mutableCopy  
    p.name = [self.name mutableCopy];
    p.address = [self.address copy];
    p.age =  self.age;
    return p;
}이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.