为啥ios nsstringg的属性要用copy而不用retain

HTML中标记用于定义...
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
浙ICP备号-2
扫一扫,把题目装进口袋<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&NSString 为什么要使用copy,而不是retain_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
NSString 为什么要使用copy,而不是retain
||文档简介
总评分4.6|
浏览量13016
&&N&#8203;S&#8203;S&#8203;t&#8203;r&#8203;i&#8203;n&#8203;g&#8203; &#8203;为&#8203;什&#8203;么&#8203;要&#8203;使&#8203;用&#8203;c&#8203;o&#8203;p&#8203;y&#8203;,&#8203;而&#8203;不&#8203;是&#8203;r&#8203;e&#8203;t&#8203;a&#8203;i&#8203;n
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢Objective-C属性修饰符strong和copy的区别
Objective-C属性修饰符strong和copy的区别
记得刚参加工作的时候总是对OC中的属性修饰符strong和copy弄不明白,也总是被这两个东西坑,慢慢工作时间长了才真正了解了它,不过今天在项目中因为不小心又被这两个东西给坑了一次,索性呢今天就把它记录下来,也为其它刚参加工作的小伙伴提个醒。
在iOS开发中当我们给一个类定义属性的时候,必不可少的要选择到底该使用strong还是copy来修饰,如果属性是NSString或者NSArray及其子类的时候,最好呢就选择使用copy修饰符。原因呢很简单,如果我门的属性修饰符使用了strong,那么当我们给它赋值的是可变的数据,如果在后面可变的数据又发生了变化,那么该属性的值也就会跟着变化,而使用copy呢就是为了防止发生这样的变化。下面呢就结合示例来说明一下问题。
定义一个Person类
声明两个不同修饰符的属性
@interface Person : NSObject
@property (nonatomic,strong) NSArray *strongA
@property (nonatomic,copy) NSArray *coyA
NSMutableArray *myNewArr = [NSMutableArray arrayWithObject:@"item1"];
Person *myPerson = [[Person alloc] init];
myPerson.strongArr = myNewA
myPerson.coyArr = myNewA
[myNewArr addObject:@"item2"];
NSLog(@"strongArr:%@",myPerson.strongArr);
NSLog(@"coyArr:%@",myPerson.coyArr);
打印结果:
结果显示用strong修饰的属性输出了:item1和item2
而用copy修饰的属性输出了:item1
这下它们的区别就显而易见了。
使用strong,则myPerson.strongArr与可变数组myNewArr指向同一块内存区域,myNewArr内容发生变化,导致myPerson.strongArr的内容也发生改变,因为两者是同一个东西;而使用copy,myPerson.coyArr在赋值之前,将可变数组myNewArr内容复制,并且创建一个新的内存区域,所以两者是不同的东西(你改你的给和我有毛关系),所以myNewArr的改变不会导致myPerson.coyArr的改变。
其实说到底呢就是不同的修饰符对用不同的setter方法:
strong对应的setter方法,是将_property先release(_property release),然后将参数retain(property retain),最后是_property = property。
copy对应的setter方法,是将_property先release(_property release),然后拷贝参数内容(property copy),创建一块新的内存地址,最后_property = property。
我的热门文章
即使是一小步也想与你分享

我要回帖

更多关于 nsstring 的文章

 

随机推荐