IOS学习笔记十八(copy、mutableCopy、NSCopying、NSMutableCopy、深复制、浅复制)

1、 copy、mutableCopy方法

copy方法返回对象的不可修改的副本

mutableCopy方法返回的对象可修改的副本


1)、测试demo

    int main(int argc, char * argv[]) {
        @autoreleasepool {
            NSMutableString *book = [NSMutableString stringWithString:@"chenyu"];
            NSMutableString *bookCopy = [book mutableCopy];
            [bookCopy replaceCharactersInRange:NSMakeRange(1, 2) withString:@"gong"];
            NSLog(@"book is %@", book);
            NSLog(@"bookCopy is %@", bookCopy);
            
            NSString *str = @"chenyu";
            NSMutableString *strCopy = [str mutableCopy];
            [strCopy appendString:@"chenyu"];
            NSLog(@"strCopy is:%@", strCopy);
            //由于str2是不可变的,所以运行下面会报错
            NSMutableString *str2 = [str copy];
            NSLog(@"str copy chen is:%@", str2);
    //        [str2 appendString:@"chenyu"];
        }
    }


2)、运行结果


    2018-07-15 19:03:35.564049+0800 cyTest[27254:9418105] book is chenyu
    2018-07-15 19:03:35.565157+0800 cyTest[27254:9418105] bookCopy is cgongnyu
    2018-07-15 19:03:35.566056+0800 cyTest[27254:9418105] strCopy is:chenyuchenyu
    2018-07-15 19:03:35.566857+0800 cyTest[27254:9418105] str copy chen is:chenyu

 
2、NSCopying、NSMutableCopy协议
对象调用copy方法来复制自身的可变副本,需要类 实现NSCopying协议,让该类实现copyWithZone方法

对象调用mutableCopy方法来复制自身的可变副本,需要类实现NSMutbaleCopying协议,让类实现mutableCopyWithZone方法demo可以看下下面写的浅复制

 
3、深复制和浅复制

我个人理解感觉浅复制是复制后的属性(指针变量)指向的地址都是同一块地址,当复制后的对象属性值发生变化的时候,原始值也发生了变化。

深复制就是复制后的属性(指针变量)指向的地址不是同一块地址,当复制后的对象属性值发生变化的时候,原始值不会发生变化。


1)、浅复制测试Demo

Dog.h

    #import <Foundation/Foundation.h>
    #ifndef Dog_h
    #define Dog_h
     
    @interface Dog : NSObject<NSCopying>
    @property (nonatomic, strong) NSMutableString *name;
    @property (nonatomic, assign) int age;
    @end
    #endif /* Dog_h */

更多请见:http://www.mark-to-win.com/tutorial/51997.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值