• ObjectiveC 深浅拷贝


    View Code
    /*****************************************
             *
             * 非容器类对象
             *
             *****************************************/
            
            /*mstr和mstrCopy指向的是同一块内存区域,我们称之为弱引用(weak reference)。而mstrMCopy是真正的复制,
             系统为其分配了新内存空间,保存从mstr复制过来的字符串值*/
            
            NSMutableString *mstr = [NSMutableString stringWithString:@"origin"];
            NSMutableString *mstrCopy = [mstr copy];
            NSMutableString *mstrMCopy = [mstr mutableCopy];
            
            NSLog(@"mstr is %@",mstr);
            NSLog(@"mstrCopy is %@",mstrCopy);
            NSLog(@"mstrMCopy is %@",mstrMCopy);
            NSLog(@"*****************************");
            
            /*mstrCopy它所指向的其实是一个imutable对象,是不可改变的,所以会出错*/
            [mstr appendString:@"111"];
            //[mstrCopy appendString:@"222"]; //Error
            [mstrMCopy appendString:@"333"];
            
            NSLog(@"mstr is %@",mstr);
            NSLog(@"mstrCopy is %@",mstrCopy);
            NSLog(@"mstrMCopy is %@",mstrMCopy);
            NSLog(@"*****************************");
            
            /*****************************************
             *
             * 容器类对象
             *
             *****************************************/
            
            /*arrayCopy1是和array指向相同的对象,包括array里面的元素也是指向相同的指针*/
            NSArray *array1     = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];
            NSArray *arrayCopy1 = [array1 copy];
            NSLog(@"array1 retain count: %d",(int)[array1 retainCount]);
            NSLog(@"array1 retain count: %d",(int)[arrayCopy1 retainCount]);
            NSLog(@"array1 %@",array1);
            NSLog(@"arrayCopy1 %@",arrayCopy1);
            
            /*mArrayCopy1是array1的可变副本,指向的对象和array1不同,但是其中的元素和array1中的元素指向的还是同一个对象。
             mArrayCopy1还可以修改自己的对象*/
            NSMutableArray *mArrayCopy1 = [array1 mutableCopy];
            [mArrayCopy1 addObject:@"de"];
            [mArrayCopy1 removeObjectAtIndex:0];
            NSLog(@"mArrayCopy1 %@",mArrayCopy1);
  • 相关阅读:
    由asp的一个错误,看语言的不同:asp & java
    chrome 显示图片遇到的问题,与 淘宝图片服务器 缓存 有关系
    asp 调用 vb(activex dll) ,参数传递(传引用)需要注意
    asp <----> vb(com,dll) <---> c 来回的调用,生命在于折腾
    HTTP/1.1 100 Continue
    java 线程栈 & java.lang.StackOverflowError
    硬盘分区的意义
    硬盘性能 & 文件碎片的一些思考
    Java并发——ReentrantLock类源码阅读
    使用Windows的NAT功能
  • 原文地址:https://www.cnblogs.com/joesen/p/2993049.html
Copyright © 2020-2023  润新知