Object-C 学习笔记(二十三)--- 拷贝

本文深入探讨了在面向对象编程中,对象复制的两种常见方式:浅拷贝与深拷贝的区别及其实现过程,并通过实例展示了如何在实际编程中应用这些概念。

拷贝:顾名思义是复制一个对象,作为一个副本.

但是在面向对象里面拷贝分为浅拷贝深拷贝.

浅拷贝: 只是简单的给对象引用计数+1,不会造成新开辟对象内存空间.


深拷贝:不会造成原本对象引用计数增加,但是会在内存中新开辟对象内存空间,内容与原本对象一致.

实例:

//
//  main.m
//  CopyDemo
//
//  Created by 5016 on 13-12-16.
//  Copyright (c) 2013年 dradon. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        //1.不可变copy--->拷贝不可变对象(和retain效果一致)
        NSArray *arr1 = [[NSArray alloc] initWithObjects:@"android", @"iPhone",@"iMac",nil];
        
        NSArray *arr2 =[arr1 copy];
        NSLog(@"arr1=%@,地址=%p,引用计数=%ld,类型=%@",arr1,arr1,[arr1 retainCount],[arr1 class]);
        NSLog(@"arr2=%@,地址=%p,引用计数=%ld,类型=%@",arr2,arr2,[arr2 retainCount],[arr2 class]);
        
        //2.不可变copy--->拷贝可变对象(用copy拷贝出来的对象都是不可变的,因为copy是不可变的)
        //对于生成新对象,称为深copy
        NSMutableArray *arr3 = [[NSMutableArray alloc] initWithObjects:@"android", @"iPhone",@"iMac",nil];
        NSArray *arr4 = [arr3 copy];
        NSLog(@"arr3=%@,地址=%p,引用计数=%ld,类型=%@",arr3,arr3,[arr3 retainCount],[arr3 class]);
        NSLog(@"arr4=%@,地址=%p,引用计数=%ld,类型=%@",arr4,arr4,[arr4 retainCount],[arr4 class]);
        
        NSMutableArray *arr5 = [arr3 copy];
        NSLog(@"arr5=%@,地址=%p,引用计数=%ld,类型=%@",arr5,arr5,[arr5 retainCount],[arr5 class]);

        //3.可变copy--->拷贝不可变对象
        NSArray *arr6 = [[NSArray alloc] initWithObjects:@"android", @"iPhone",@"iMac",nil];
        NSMutableArray *arr7 = [arr6 mutableCopy];
        NSLog(@"arr6=%@,地址=%p,引用计数=%ld,类型=%@",arr6,arr6,[arr6 retainCount],[arr6 class]);
        NSLog(@"arr7=%@,地址=%p,引用计数=%ld,类型=%@",arr7,arr7,[arr7 retainCount],[arr7 class]);
        
        //4.可变copy--->拷贝可变对象
        NSMutableArray *arr8 = [[NSMutableArray alloc] initWithObjects:@"android", @"iPhone",@"iMac",nil];
        NSMutableArray *arr9 = [arr8 mutableCopy];
        NSLog(@"arr8=%@,地址=%p,引用计数=%ld,类型=%@",arr8,arr8,[arr8 retainCount],[arr8 class]);
        NSLog(@"arr9=%@,地址=%p,引用计数=%ld,类型=%@",arr9,arr9,[arr9 retainCount],[arr9 class]);
        
     }
    return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值