zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    mac下安装golang
    go run/ go install/ go build / go get的区别
    git报错The authenticity of host 'github.com (13.229.188.59)' can't be established. RSA key fingerprint is。。。
    2. Java内存区域
    4. 垃圾回收- 4.1判断对象是否存活算法
    1. 各种虚拟机的发展历史
    springBoot多数据源(不同类型数据库)项目
    Linux shell脚本启动 停止 重启jar包
    IDEA云盘下载
    GitHub配置
  • 原文地址:https://www.cnblogs.com/joesen/p/2993049.html
Copyright © 2011-2022 走看看