A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© nsswift 中级黑马   /  2015-5-24 09:03  /  1062 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 nsswift 于 2015-6-15 09:09 编辑

Copy其实是建立了一个相同的对象,而retain不是如图:



比如一个Car对象 Car *car1 =[ [Car alloc]init];

如果使用retain Car *car2 = [car1 retain];这样如果使用car1对对象中的属性进行改变这样car2指向对象的值也会改变,因为car1 car2指向的是同一个对象。

如果使用copy 这样就相当于两个对象,两个对象的值是相同的,原来的对象引用计数不变,新copy的对象的引用计数为1.

NSString是只读的,那么为什么一般NSString都用copy呢?

由于纯NSString是只读的, 所以retain和copy的结果一样。但是NSString的子类NSMutibleString是可以修改的父类可以指向子类(多态知识)为了防止mutable string被无意中修改, 所以NSString一般用copy而不是用retain。

file:///c:/documents and settings/administrator/application data/360se6/User Data/temp/Center.jpg

aaa.jpg (44.01 KB, 下载次数: 6)

aaa.jpg

评分

参与人数 1黑马币 +15 收起 理由
itios + 15 很给力!

查看全部评分

3 个回复

倒序浏览
学习了,思路不错
回复 使用道具 举报
楼主这是有专门写代码的工具,你这种写法看不出明示的缩进,看你的代码很头痛呀!
回复 使用道具 举报
我搬走研究研究。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马