- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在努力思考 NSString 和 NSMutableString,以及它们如何影响内存。
在我的研究中,我得出的结论是,如果我创建一个 NSString 对象并为其赋值,然后稍后更改该值,则原始对象将被另一个具有新值的对象替换。
我的问题是,在更改 NSString 的值的情况下。当 NSString 的值发生变化,指向的对象被新对象替换时,原来的对象会发生什么变化?这是内存泄漏吗?
谢谢! V
最佳答案
NSString
可以包含字符串文字,它们是编译时常量,以及字符串对象,它们在运行时动态实例化。
对于字符串文字,没有动态实例化,因此它们不会在运行时影响内存。将文字值分配给 NSString
变量
NSString *myString = @"string1";
然后分配另一个字面值
myString = @"string2";
不会对可用内存量进行任何更改。
如果是字符串对象,内存确实会发生变化。如果你有一个 NSString
类型的变量,并为它分配一个动态字符串,例如
NSString *myString = [NSString stringWithFormat:@"String %d", 1];
一个新的 NSString
实例被分配,用提供的字符串初始化,并分配给 myString
变量。
如果稍后您分配一个新的动态值
myString = [NSString stringWithFormat:@"String %d", 2];
创建了一个新的 NSString
实例,但它不会替换旧实例。两者都被实例化并在内存中。
当通过第一个 NSString
实例使用 ARC 时,如果不再引用,将因为未被使用而被释放。这是自动处理的,因此无需通过代码执行任何操作。
也许您对新旧实例有时会使用内存这一事实更感兴趣 - 但在未使用的实例被释放之前这是暂时的。
为了回答您的问题,不,没有内存泄漏。字符串文字会在整个应用程序生命周期内持续存在,因为它们是常量。 String 对象的分配和释放(释放),释放由 ARC 自动处理。
当然这是一个适用于任何动态实例化类的通用概念,而不仅仅是 NSString
- 但不适用于原始数据类型(int、boolean、float 等),因为这些类型的变量保存实际值,而不是指向值所在内存区域的指针。如果您想知道,原始数据类型不会产生内存泄漏。
关于ios - NSString 和 NSMutableString 内存注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22019727/
我正在运行PHP脚本,并继续收到如下错误: 注意:未定义的变量:第10行的C:\ wamp \ www \ mypath \ index.php中的my_variable_name 注意
我正在运行PHP脚本,并继续收到如下错误: 注意:未定义的变量:第10行的C:\ wamp \ www \ mypath \ index.php中的my_variable_name 注意
我正在运行PHP脚本,并继续收到如下错误: 注意:未定义的变量:第10行的C:\ wamp \ www \ mypath \ index.php中的my_variable_name 注意
我正在运行一个PHP脚本,并且继续收到如下错误:。第10行和第11行如下所示:。这些错误消息的含义是什么?。为什么他们突然出现了?我多年来一直使用这个脚本,从来没有遇到过任何问题。。我该怎么修理它们呢
当我在 flutter clean 之后运行 flutter run 或 debug my code 时显示此错误 Note: C:\src\flutter.pub-cache\hosted\pub.
My Goal: To fix this error and be able to run my app without an error. Error Message: Note:D:\Learni
前言:今天在解决一个问题时,程序总是不能输出正确值,分析逻辑思路没问题后,发现原来是由于函数传递导致了这个情况。 LeetCode 113 问题:给你二叉树的根节点
我正在 R 中开发一个包,当我运行时 devtools::check()我收到以下说明。 checking DESCRIPTION meta-information ... NOTE Malforme
获得通知和警告波纹管 Notice: Use of undefined constant GLOB_BRACE - assumed 'GLOB_BRACE' in /var/www/html/open
我正在准备一个 R 包以提交给 CRAN。 R CMD 检查给了我以下注意: Foreign function calls to a different package: .Fortran("cinc
我正在尝试从以下位置获取数据: http://api.convoytrucking.net/api.php?api_key=public&show=player&player_name=Mick_Gi
我有这段代码,但我不明白为什么我仍然有这个错误,我已经尝试了所有解决方案,但无法解决这个问题:-注意:未定义索引:product_price-注意:未定义索引:product_quantity-注意:
This question already has answers here: “Notice: Undefined variable”, “Notice: Undefined index”, and
我正在尝试从以下位置获取数据: http://api.convoytrucking.net/api.php?api_key=public&show=player&player_name=Mick_Gi
切记,在PHP 7中不要做的10件事 1. 不要使用 mysql_ 函数 这一天终于来了,从此你不仅仅“不应该”使用mysql_函数。PHP 7 已经把它们从核心中全部移除了,也就是说你需要迁移
前几天安装了dedecms系统,当在后台安全退出的时候,后台出现空白,先前只分析其他功能去了,也没太注意安全,看了一下安全退出的代码,是这样写的: 复制代码 代码如下: function ex
我使用此代码来检查变量$n0、$n1、$n2是否未定义。 但每次未定义时我都会收到通知。我的代码是一种不好的做法吗?还有什么替代方案吗?或者只是删除通知,代码就可以了? if
编写代码时处理所有警告是否重要?在我公司中具有较高资历的开发人员坚持认为警告是无害的。诚然,其中一些是: Warning: Division by zero Notice: Undefined ind
我有一个搜索查询,执行搜索查询后,我将$ result放入数组中。 我的PHP代码- $contents = $client->search($params); // executing the se
This question already has answers here: “Notice: Undefined variable”, “Notice: Undefined index”, and
我是一名优秀的程序员,十分优秀!