美文网首页
NSString strong copy

NSString strong copy

作者: 梁发朋_20bb | 来源:发表于2018-07-18 18:01 被阅读0次

    第一个打印  strongStr 0x1044ceb18 & 0x1070d5608 & 0x16d7c7cd8  & 0x1044ceb18

    第二个打印 strCopy      0x104906b18 & 0x10795a610 & 0x16d38fcd8  & 0x104906b18

    第三个打印  isKindOfClass:NSString 1 & isMemberOfClass 0

    通过第一个打印  和第二个打印

    1.对于不可变的对象NSString 不同的引用都是浅拷贝,指向的仍然是原来的数据对象,只是在原有的引用计数上面加一

    2.对于第三个打印,这里面分析起来会比较复杂

    简单的说,NSString的实例并不是NSString,只是掌握了对象的管理权

    CoreFoundation 和OC通过桥接连接起来,其实这个对象是属于NSCFString 

    NSCFString是NSString的私有子类,对应CFString的一个对象在OC中进行工作

    作为对象的归属CFString的第一个元素isa指针,就是指向NSCFString

    这个主要的设计是OC与CoreFoundation的桥接  


    第二部分

    strongMStr  0x1c4854f40 & 0x107087218 & 0x104dfeb98 & 0x104dfeb98

    CopyMStr 0xa000000007070703 & 0x107087220 & 0x104dfeb98 & 0x16ce97c68

    结论  通过这个能够明显知道 在进行可变操作的时候,对于原有字符串都是进行了深拷贝,



    strongMStr  0x1c4854f40 & 0x107087218 & 0x104dfeb98 & 0x104dfebf8

    对于两次打印的 strongMStr,能够得出可变的字符串进行强引用的时候可以不回发生地址的改变



    -----------意外点-----------

    这个时候直接报错 NSTaggedPointerString

    这种是苹果采用的一种新技术叫做伪指针   

    通过这个异样的地址我们能够看出  0xa000000007070703

    已经不再是NSMutableString 这个时候是不能使用NSMutableString的方法的,这个是为了提升效率所采用的,在使用方法变化的时候,内存会不断的分配,内存会同样不断的增加,在swift 4.0 对于这方面已经有很好的优化。



    总结:这里主要是对于copy和strong对于String的应用做出一定得判断

    相关文章

      网友评论

          本文标题:NSString strong copy

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