NSMutableArray 被copy、strong修饰后的变化

一、源对象为可变对象  NSMutableArray * arrayTemp = [NSMutableArray array];

1、@property(nonatomic,strong)NSMutableArray * array;

//array 用Strong修饰,只是指针引用,内存地址不变,类型也不变,均为原先的类型

NSMutableArray * arrayTemp = [NSMutableArray array];

    self.array = arrayTemp;

    NSLog(@"arrayTemp:%p-------self.array:%p",arrayTemp,self.array);

    NSLog(@"arrayTemp:%@------self.array:%@",[arrayTemp class],[self.array class]);

2017-02-21 17:21:51.742 内存管理[5515:1636890] arrayTemp:0x610000052c00-------self.array:0x610000052c00

2017-02-21 17:21:51.742 内存管理[5515:1636890] arrayTemp:__NSArrayM------self.array:__NSArrayM


2、@property(nonatomic,copy)NSMutableArray * array1;

//array1 用COPY修饰,则为拷贝,拷贝出一块新内存来,由可变变为不可变,类型变化

NSMutableArray * arrayTemp = [NSMutableArray array];

    self.array1 = arrayTemp;

    NSLog(@"arrayTemp:%p-------self.array1:%p",arrayTemp,self.array1);

    NSLog(@"arrayTemp:%@------self.array1:%@",[arrayTemp class],[self.array1 class]);

2017-02-21 17:21:51.742 内存管理[5515:1636890] arrayTemp:0x610000052c00-------self.array:0x61000000c980

2017-02-21 17:21:51.742 内存管理[5515:1636890] arrayTemp:__NSArrayM------self.array:__NSArray0

3、@property(nonatomic,strong)NSArray * array;

NSMutableArray * arrayTemp = [NSMutableArray array];

    //array 用Strong修饰,只是指针引用,内存地址不变,类型也不变,均为原先的类型

    self.array = arrayTemp;

    NSLog(@"arrayTemp:%p-------self.array:%p",arrayTemp,self.array);

    NSLog(@"arrayTemp:%@------self.array:%@",[arrayTemp class],[self.array class]);

2017-02-21 17:33:49.090 内存管理[5617:1719357] arrayTemp:0x610000055330-------self.array:0x610000055330

2017-02-21 17:33:49.090 内存管理[5617:1719357] arrayTemp:__NSArrayM------self.array:__NSArrayM

4、

@property(nonatomic,copy)NSArray * array1;

NSMutableArray * arrayTemp = [NSMutableArray array];

 //array1 用COPY修饰,则为拷贝,拷贝出一块新内存来,由可变变为不可变,类型变化

    self.array1 = arrayTemp;

    NSLog(@"arrayTemp:%p-------self.array1:%p",arrayTemp,self.array1);

    NSLog(@"arrayTemp:%@------self.array1:%@",[arrayTemp class],[self.array1 class]);

2017-02-21 17:33:49.090 内存管理[5617:1719357] arrayTemp:0x610000055330-------self.array1:0x61800000ec90

2017-02-21 17:33:49.091 内存管理[5617:1719357] arrayTemp:__NSArrayM------self.array1:__NSArray0


二、源对象为不可变对象时  NSArray * arrayTemp = [NSArray array];

1、@property(nonatomic,strong)NSMutableArray * array;

//array 用Strong修饰,内存地址均不变,类型也不便

NSArray * arrayTemp = [NSArray array];

    self.array = arrayTemp;

    NSLog(@"arrayTemp:%p-------self.array:%p",arrayTemp,self.array);

    NSLog(@"arrayTemp:%@------self.array:%@",[arrayTemp class],[self.array class]);

2017-02-21 17:27:17.518 内存管理[5561:1672059] arrayTemp:0x6100000146d0-------self.array:0x6100000146d0

2017-02-21 17:27:17.518 内存管理[5561:1672059] arrayTemp:__NSArray0------self.array:__NSArray0

2、

//array1 用COPY修饰,内存地址均不变,类型也不便,均为不可变数组

NSArray * arrayTemp = [NSArray array];

    self.array1 = arrayTemp;

    NSLog(@"arrayTemp:%p-------self.array1:%p",arrayTemp,self.array1);

    NSLog(@"arrayTemp:%@------self.array1:%@",[arrayTemp class],[self.array1 class]);

2017-02-21 17:27:17.518 内存管理[5561:1672059] arrayTemp:0x6100000146d0-------self.array1:0x6100000146d0

2017-02-21 17:27:17.519 内存管理[5561:1672059] arrayTemp:__NSArray0------self.array1:__NSArray0

3、4、 地址不变,全部为不可变数组

@property(nonatomic,strong)NSArray * array;


@property(nonatomic,copy)NSArray * array1;

NSArray * arrayTemp = [NSArray array];

    //array 用Strong修饰,只是指针引用,内存地址不变,类型也不变,均为原先的类型

    self.array = arrayTemp;

    NSLog(@"arrayTemp:%p-------self.array:%p",arrayTemp,self.array);

    NSLog(@"arrayTemp:%@------self.array:%@",[arrayTemp class],[self.array class]);

    //array1 用COPY修饰,则为拷贝,拷贝出一块新内存来,由可变变为不可变,类型变化

    self.array1 = arrayTemp;

    NSLog(@"arrayTemp:%p-------self.array1:%p",arrayTemp,self.array1);

    NSLog(@"arrayTemp:%@------self.array1:%@",[arrayTemp class],[self.array1 class]);

2017-02-21 17:39:16.391 内存管理[5662:1759004] arrayTemp:0x600000007f00-------self.array:0x600000007f00

2017-02-21 17:39:16.391 内存管理[5662:1759004] arrayTemp:__NSArray0------self.array:__NSArray0

2017-02-21 17:39:16.391 内存管理[5662:1759004] arrayTemp:0x600000007f00-------self.array1:0x600000007f00

2017-02-21 17:39:16.391 内存管理[5662:1759004] arrayTemp:__NSArray0------self.array1:__NSArray0

综上所述:

修饰可变类型时,一般用strong,不用copy,否则可能会导致由可变变为不可变类型,导致系统崩溃,当修饰可变类型的属性时,如NSMutableArray、NSMutableDictionary、NSMutableString,用strong。当修饰不可变类型的属性时,如NSArray、NSDictionary、NSString,用copy。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值