美文网首页
strong,weak,retain,assign,copy n

strong,weak,retain,assign,copy n

作者: mjf | 来源:发表于2016-12-12 17:16 被阅读0次

    assign: 简单赋值,不更改索引计数(Reference Counting)对基础数据类

    copy与strong区别:

    当源字符串是NSString时,由于字符串是不可变的,所以,不管是strong还是copy属性的对象,都是指向源对象,copy操作只是做了次浅拷贝。

    当源字符串是NSMutableString时,strong属性只是增加了源字符串的引用计数,而copy属性则是对源字符串做了次深拷贝,产生一个新的对象,且copy属性对象指向这个新的对象。另外需要注意的是,这个copy属性对象的类型始终是NSString,而不是NSMutableString,因此其是不可变的。

    retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 ,对其他NSObject和其子类

    You can use CFGetRetainCount with Objective-C objects, even under ARC:

    NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)myObject));

    weak和strong的区别:

    weak和strong不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它。一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。

    copy与retain的区别:

    copy其实是建立了一个相同的对象,而retain不是;

    copy是内容拷贝,retain是指针拷贝;

    copy是内容的拷贝 ,对于像NSString,的确是这样,如果拷贝的是NSArray这时只是copy了指向array中相对应元素的指针.这便是所谓的"浅复制"。

    __block和__weak修饰符的区别

    __block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。

    __weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。

    __block对象可以在block中被重新赋值,__weak不可以。

    相关文章

      网友评论

          本文标题:strong,weak,retain,assign,copy n

          本文链接:https://www.haomeiwen.com/subject/bwnmmttx.html