之前一直以为retain就是简单的计数器+1,copy就是重新开辟内存复制对象;
其实不是这样,原来之前的自己独自徘徊于糊涂之中。
(官方SDK,对NSString属性的定义都是用copy,而不是retain)
在明了的原因是,怕你赋值的是一个MutableString,而MutableString是可变了,如果只是retain,那么当你在外面改变了这个值的时候,你的属性的值也改变了
代码:
定义一个属性:
@property (copy,nonatomic)NSString *myTest;
@synthesize myTest;
NSMutableString *temp = [[NSMutableStringalloc]initWithFormat:@"jjjjjj"];
self.myTest = temp;
NSLog(@"%@ ",myTest);
[temp appendString:@"adsdsdsd"];
NSLog(@"%@ ",myTest);
打印:
2013-02-20 11:45:41.129 Nimbus[2474:c07] jjjjjj
2013-02-20 11:45:41.131 Nimbus[2474:c07] jjjjjj
那如果用retian呢??
@property (retain,nonatomic)NSString *myTest;
@synthesize myTest;
NSMutableString *temp = [[NSMutableStringalloc]initWithFormat:@"jjjjjj"];
self.myTest = temp;
NSLog(@"%@ ",myTest);
[temp appendString:@"adsdsdsd"];
NSLog(@"%@ ",myTest);
2013-02-20 11:48:46.794 Nimbus[2791:c07] jjjjjj
2013-02-20 11:48:46.795 Nimbus[2791:c07] jjjjjjadsdsdsd
声明的一个NSString *str变量,然后把一个NSMutableString *mStr变量的赋值给它了,如果要求str跟着mStr变化,那么就用retain;如果str不能跟着mStr一起变化,那就用copy。而对于要把NSString类型的字符串赋值给str,那两都没啥区别。不会影响安全性,内存管理也一样。
mutableCopy:始终是深复制,引用计数不改变。始终返回一个可变对象
分享到:
相关推荐
@property中的retain,copy,assign区别
retain和copy还有assign的区别
详细讲解了ios中常用关键字的使用方法的区别,着重讲解了assign,retain,copy之间的区别
ios提供了copy和mutablecopy方法,顾名思义,copy就是复制了一个imutable的对象,而mutablecopy就是复制了一个mutable的对象。 copy与retain的区别: copy是创建一个新对象,retain是创建一个指针,引用对象计数加1...
我们在声明@property 属性时,总是要在括号中写上assign、retain、copy、weak、strong中的一个,很多时候,我们仅仅只是按照习惯去写经常写的那一个,但有时候看代码时又会发现别人用的不尽相同,那这些之间的区别是...
针对iOS 对象的属性的关键字(retain/assign/readonly等)的区别。彻底解决您的疑惑。
SAS-The RETAIN Statement; Retain的用法,英文版。
对于Retain和Assign属性的理解
FastCopy ver2.08 2011/02/28 SHIROUZU Hiroaki FastCopy is the Fastest Copy/Delete Software on Windows. It can copy/delete unicode and over MAX_PATH(260byte) pathname files. It always run by ...
Google Objective-C Style Guide 中文版 目录 例子 空格与格式 空格与制表符 行宽 方法声明与定义 ...Setters中对NSString进行copy 避免抛出异常 nil的检查 BOOL陷阱 属性 Cocoa模式 委托模式 模型-视图-控制器
主要介绍了iOS开发之详谈属性设置readwrite、readonly、retain、copy、assign、nonatomic的相关资料,需要的朋友可以参考下
RETAIN-Keras:重新实现RETAIN的Keras ,它允许创建高度可解释的递归神经网络模型以进行患者诊断,而不会降低模型性能 该存储库保留了Keras对RETAIN的重新实现,可以灵活地修改原始代码,引入了多个新功能,并提高...
FastCopy ver2.08 2011/02/28 SHIROUZU Hiroaki ====================================================================== FastCopy is the Fastest Copy/Delete Software on Windows. It can copy/delete ...
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright ...
7、定义属性时,什么情况使用copy,assign,和retain 8、autorelease的对象是在什么时候被release的? 9、这段代码有什么问题,如何修改 10、for (int i = 0; i ; i++) { NSString *string = @”Abc”; ...
@property(nonatomic,retain)NSString *name;//节点名称 @property(nonatomic,retain)NSString *value;//节点值 @property BOOL haveChilds;//是否有子节点 @property BOOL haveAttribute;//是否有属性 @...
我们已经看到 alloc, retain, release, and dealloc 在 GNUstep 中的实现,同时也学到了如下知识:所有的 OC 对象有一
Informatica skill:One way to retain the value from orevious row within Informatica Mapping
@property (nonatomic, retain)NSString *objName; @property BOOL *isList; @property (nonatomic, retain) NSMutableString *currentResult; @property (nonatomic, retain) NSMutableDictionary *map; @...