快速记1通常来说copy NSStringNSMutableStringblock 2strong 一般对象如NSNumber除了NSTring 对象外retain 是iOS5之前的copystrong区别,相当与5之后的strongcopystrong区别,weak弱引用ARC机制下的assign strong强引用ARC机制下的retain3weakassign 是iOS5之前的,相当与5之后的weak UI控。
示例 我们定义一个类,并为其声明两个字符串属性,如下所示interface TestStringClass property nonatomic, strong NSString *strongStringproperty nonatomic, copy NSString *copyedStringend 上面的代码声明了两个字符串属性,其中一个内存特性是strong,一个是copy下面我们来看看它们的区。
我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择基于ARC环境strong与copy那这两者有什么区别呢什么时候该用strong,什么时候该用copy呢让我们先来看个例子示例 我们定义一个类,并为其声明两个字符串属性,如下所示interface TestStringClass property nonatomic。
什么是assign,copy,retain之间的区别assign 简单赋值,不更改索引计数Reference Countingcopy 建立一个索引计数为1的对象,然后释放旧对象 retain释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 weak 和strong的区别weak和strong不同的是 当一个对象不再有。
retain 到另外一个 NSString 之 后,地址相同建立一个指针,指针拷贝,内容当然相 同,这个对象的 retain 值+1 assign 地址还是0x1111,内容也还是“ABC”也就是说,retain 是指针拷贝,copy 是内容拷贝strong,weak 用来修饰属性strong 用来修饰强引用的属性property strong SomeClass * a。
是指针拷贝,copy 是内容拷贝strong,weak 用来修饰属性strong 用来修饰强引用的属性property strongSomeClass aObject对应原来的 property retainSomeClass aObject和 property copySomeClass aObjectweak 用来修饰弱引用的属性property weakSomeClass aObject对应原来的 property。
NSLog@quotcopyStr%@quot, _cStr结果,使用retain的字串rStr的值@quotabcdequot,而使用copy的字串cStr的值@quotabcquot,所以,如果一般情况下,我们都不希望字串的值跟着mStr变化,所以我们一般用copy来设置string的属性如果希望字串的值跟着赋值的字串的值变化,可以使用strong,retain希望可以帮到你。
而上面的例子可以看出,当源字符串是NSString时,由于字符串是不可变的,所以,不管是strong还是copy属性的对象,都是指向源对象,copy操作只是做了次浅拷贝当 源字符串是NSMutableString时,strong属性只是增加了源字符串的引用计数,而copy属性则是对源字符串做了次深拷贝,产生一个新的 对象,且copy。
我们还是举上面那个例子,进行str = sourceStr操作时,内部会执行一个操作str = sourceStr copy那么这个copy里面做了什么呢?if str isMemberOfClassstr class没错,就是进行一次判断,判断来源是可变的还是不可变的,如果是不可变,那么好,接下来的操作就跟strong修饰的没有区别,进行浅拷贝。
还没有评论,来说两句吧...