征服objective—c 的NScopy,NSMutablecopy

oc中的copy并不难,只要细心的理解每个碎知识点就一定能掌握,下面我就带着大家一起来征服它!

拷贝分为深拷贝和浅拷贝
  浅拷贝:不产生新的对象,直接指向原有对象
深拷贝:产生新的对象,其内容是原有对象的内容

拷贝: NSCopy NSMutableCopy

NSCopy 拷贝出的结果是不可变对象,跟其接受类型没有关系,跟其传入类型也没有关系, NSMutablecopy 拷贝的结果是可变对象,跟其传入的类型没有关系,但是会受其接收类型的影响, 当使用 NSCopy 复制一个不可变对象时,其行为是浅复制,其余情况都是深拷贝。

当使用 NSMutablecopy 时,是深拷贝(前提是copy系统自带nsstring,naarry。。。等

话不多说还是上代码比较简洁明了:

建一个person类;


main函数:
#import <Foundation/Foundation.h>
#import
"Person.h"

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

     
Person *p = [[ Person alloc ] init ];
     
NSMutableString *s = [ NSMutableString stringWithFormat : @"胡 汉三 " ];
       
        p.
name = s;
       

       
NSLog ( @"%@" ,p);

//打印结果 :胡汉三

        Person *p1 = [p mutableCopy ];

 //深拷贝,p1的地址和p不一样,可以打印地址看一下
       

       [s
setString : @" 王五 " ];
       p1.
name = s;
       
NSLog ( @"%@,%@" ,p,p1);

//打印结果 p = 胡汉三 ,p1 = 王五 
    }
   
return 0;
}

---------------------------------------------------------------------------------------

person.h文件



#import <Foundation/Foundation.h>

@interface Person : NSObject < NSCopying , NSMutableCopying >

@property ( nonatomic , copy ) NSString *name;

//定义一个name属性,此时括号里应该用copy 而不是strong。

@end

--------------------------------------------------------------------------------------

person.m 文件

#import "Person.h"

@implementation Person
-(
NSString *)description{
   
return _name ;
}
// 如果直接 return self ,则是浅拷贝,如果使用 alloc ,则是深拷贝
-(
id )copyWithZone:( NSZone *)zone{
   
   
Person *p = [ Person allocWithZone :zone];

   
return p;
}

// 如果直接 return self ,则是浅拷贝,如果使用 alloc ,则是深拷贝
-(
id )mutableCopyWithZone:( NSZone *)zone{
   
Person *p = [ Person allocWithZone :zone];
   

   
return p;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值