
但是如果使用NSMutableString,无论你做什么,字符串都会在内存中保持相同的地址.
我想知道这究竟是如何运作的.使用像replaceCharactersInRange这样的方法,我甚至可以为字符串添加更多字符,因此我需要更多内存用于字符串.内存中跟随字符串的对象会发生什么?它们都被重新安置并放在内存中吗?我不这么认为.但究竟发生了什么?
解决方法I kNow all instances of Nsstring are
inmutable. If you assign a new value
to a string new memory is addressed
and the old string will be lost.
这不是可变性如何工作,也不是对Nsstrings的引用如何工作.指针也不起作用.
指向对象的指针 – Nsstring * a;声明一个变量a,它是一个指向对象的指针 – 只是将地址保存在对象的内存中.实际对象[通常]是包含实际对象本身的内存堆上的分配.
在这些方面,运行时间之间确实没有区别:
Nsstring *a;NSMutableString *b;
两者都引用 – 内存中的某些分配地址.唯一的区别是在编译期间,b将被视为与a不同,并且如果您在调用b时使用NSMutableString方法(但在调用a时)编译器不会抱怨.
至于NSMutableString如何工作,它在内部包含一个包含字符串数据的缓冲区(或几个缓冲区 – 实现细节).当您调用其中一个改变字符串内容的方法时,可变字符串将根据需要重新分配其内部存储以包含新数据.
对象不会在内存中移动.一旦分配,分配将永远不会移动 – 对象或分配的地址永远不会改变.唯一的例外是当你使用像realloc()这样的东西时可能返回不同的地址.但是,这实际上只是一系列free();的malloc();的memcpy();.
我建议你重新阅读Objective-C Programming Guide或者可能的C编程手册.
总结以上是内存溢出为你收集整理的objective-c – NSMutableString如何正常工作?全部内容,希望文章能够帮你解决objective-c – NSMutableString如何正常工作?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)