注册 登录
主题 : 招一个靠谱的ios这题怎么解释???
级别: 新手上路
UID: 540587
精华: 0
发帖: 2
可可豆: 11 CB
威望: 11 点
在线时间: 42(时)
注册时间: 2016-01-25
最后登录: 2018-04-27
0 楼:  发表于: 2018-04-18 17:13    发自: Web Page
来源于 一般提问 分类

围棋的玩法:招一个靠谱的ios这题怎么解释???   

github链接在这

定义一个以 strong 修饰的 array:
 36选7玩法 www.mnaki.com 

@property (nonatomic ,readwrite, strong) NSArray *array;



然后进行下面的操作:

?? NSArray *array = @[ @1, @2, @3, @4 ];
?? NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:array];
?? 
?? self.array = mutableArray;
?? [mutableArray removeAllObjects];;
?? NSLog(@"%@",self.array);
?? 
?? [mutableArray addObjectsFromArray:array];
?? self.array = [mutableArray copy];
?? [mutableArray removeAllObjects];;
?? NSLog(@"%@",self.array);



打印结果如下所示:




2015-09-27 19:10:32.523 CYLArrayCopyDmo[10681:713670] (
)
2015-09-27 19:10:32.524 CYLArrayCopyDmo[10681:713670] (
?? 1,
?? 2,
?? 3,
?? 4
)



我测试了一下的确是这样,但是下文又说对集合类型比如NSArray 类型进行copy操作是指针复制,那不就是等同于strong,引用计数+1嘛?哪来的复制一颗不可变副本的说法?
关键词: ios
级别: 新手上路
UID: 572727
精华: 0
发帖: 11
可可豆: 11 CB
威望: 11 点
在线时间: 34(时)
注册时间: 2016-07-11
最后登录: 2018-04-27
1 楼:  发表于: 2018-04-18 17:45    发自: Web Page
    array             -- copy -->    copyArray
      |                                             |
      |                                             |  
    空间A                                    空间B
                         ||
                         ||
                     object

我是这样理解的  
级别: 新手上路
状态: 连续签到 - [2天]
UID: 510054
精华: 0
发帖: 27
可可豆: 63 CB
威望: 61 点
在线时间: 343(时)
注册时间: 2015-09-29
最后登录: 2018-04-27
2 楼:  发表于: 2018-04-18 18:02    发自: Web Page
是的,对不可变对象的copy操作都是指针复制
你现在可能是认为自己声明的属性是NSArray(不可变类型)的,所以即便copy修饰的也都是指针复制跟strong修饰没差别,但其实这个跟指针类型没有关系,跟你要引用(copy)的对象类型有关系,
...也可能我曲解了你的意思,但总的来说就是这样
级别: 骑士
状态: 连续签到 - [15天]
UID: 526021
精华: 0
发帖: 435
可可豆: 796 CB
威望: 779 点
在线时间: 455(时)
注册时间: 2015-11-24
最后登录: 2018-04-27
3 楼:  发表于: 2018-04-19 09:33    发自: Web Page
NSLog(@"%p,%p",self.arrray,mutableArray);
级别: 骑士

状态: 连续签到 - [54天]
UID: 471816
精华: 0
发帖: 326
可可豆: 698 CB
威望: 564 点
在线时间: 634(时)
注册时间: 2015-05-11
最后登录: 2018-04-28
4 楼:  发表于: 2018-04-19 09:46    发自: Web Page
又要我拿出这张图了吗?
图片:修饰符.png
It's time to turn.
级别: 侠客

状态: 连续签到 - [29天]
UID: 331913
精华: 0
发帖: 179
可可豆: 431 CB
威望: 370 点
在线时间: 536(时)
注册时间: 2014-06-24
最后登录: 2018-04-24
5 楼:  发表于: 2018-04-19 14:48    发自: Web Page
你可能没仔细看,文中有这么一段话

在集合类对象中,对 immutable 对象进行 copy,是指针复制, mutableCopy 是内容复制;对 mutable 对象进行 copy 和 mutableCopy 都是内容复制。但是:集合对象的内容复制仅限于对象本身,对象元素仍然是指针复制。用代码简单表示如下:

[immutableObject copy] // 浅复制
[immutableObject mutableCopy] //单层深复制
[mutableObject copy] //单层深复制
[mutableObject mutableCopy] //单层深复制

就是说,对可变类型来说,无论copy还是mutableCopy,都是进行深复制也就是内容复制,那么例子里面
self.array = [mutableArray copy];  是深复制,复制了内容,开辟新内存
self.array = mutableArray;             是浅复制,只复制指针,不占用新内存

而你所说的“对集合类型比如NSArray 类型进行copy操作是指针复制,那不就是等同于strong,引用计数+1嘛?哪来的复制一颗不可变副本的说法?”是针对不可变类型,搞清NSArray和NSMutableArray的区别,两者是不同的。
级别: 光明使者

状态: 连续签到 - [52天]
UID: 96533
精华: 0
发帖: 8046
可可豆: 8478 CB
威望: 8263 点
在线时间: 310(时)
注册时间: 2011-10-08
最后登录: 2018-04-27
6 楼:  发表于: 2018-04-23 18:20    发自: Web Page
我这转swift的看着array和self.array难受死了。。。
      
爱好+坚持
级别: 新手上路
UID: 622309
精华: 0
发帖: 6
可可豆: 6 CB
威望: 6 点
在线时间: 32(时)
注册时间: 2017-08-29
最后登录: 2018-04-24
7 楼:  发表于: 2018-04-24 09:58    发自: Web Page
你怕是真的新手上路  strong和copy都搞不懂
级别: 新手上路
状态: 连续签到 - [1天]
UID: 421252
精华: 0
发帖: 15
可可豆: 19 CB
威望: 17 点
在线时间: 53(时)
注册时间: 2014-12-24
最后登录: 2018-04-26
8 楼:  发表于: 2018-04-24 11:44    发自: Web Page
第一个打印是多态的表现。
第二个就是copy的表现。
级别: 侠客
UID: 494680
精华: 0
发帖: 96
可可豆: 123 CB
威望: 123 点
在线时间: 427(时)
注册时间: 2015-08-04
最后登录: 2018-04-25
9 楼:  发表于: 2018-04-24 13:34    发自: Web Page
5楼正解   有些大神怕是连题目都没看懂
描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    幸运飞艇5码公式 | 幸运飞艇开奖直播app | 北京pk | 幸运农场官网 | 重庆幸运农场预测结果 | 重庆幸运农场开奖历史 | 北京赛车pk10高手心得 | 幸运飞艇定位公式 | 905| 775| 12| 956| 284| 777| 986| 698| 337| 384| 顶部