objective-c – NSMutableString如何正常工作?

objective-c – NSMutableString如何正常工作?,第1张

概述我知道NSString的所有实例都是不可改变的.如果为字符串分配新值,则会寻址新内存,旧字符串将丢失. 但是如果使用NSMutableString,无论你做什么,字符串都会在内存中保持相同的地址. 我想知道这究竟是如何运作的.使用像replaceCharactersInRange这样的方法,我甚至可以为字符串添加更多字符,因此我需要更多内存用于字符串.内存中跟随字符串的对象会发生什么?它们都被重新 我知道Nsstring的所有实例都是不可改变的.如果为字符串分配新值,则会寻址新内存,旧字符串将丢失.

但是如果使用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如何正常工作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1007466.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存