在文章之前,我们提出以下问题:
1.如果NSSTRING类型用强度修改,将会发生什么?2。如果使用副本修改NSMutableString类型,将会发生什么?
当我们在iOS项目中开发时,我们通常必须处理字符串类型对象。当我们声明NSString对象或NSMutableString对象时,我们经常看到修改后的单词是复制和强的。这篇文章将在这里进行详细的解释。在Arc的前提下,复制的情况是什么,可以修改NSSTRING和NSMUTABLESTRING!在阅读本文后,我希望每个人都可以清楚地了解使用副本或强烈!
首先在标题文件中定义以下属性
以下分析将通过副本和强大的修改产生哪些结果。我们在.m文件中编写以下测试代码以实例化NSString变量测试,然后分配给String_copy和String_strong。
分析:可以通过日志观察到String_copy和string_strong指向测试修改之前的地址。地址是携带字符串内容,但仅是指向地址指向地址的副本)。测试修改后,测试指向新地址,内容也更改,但是副本,string_copy和string_strong点点向方向列仍然是原始地址。使用下一张图片以表示他们在堆栈中的关系这样每个人都可以更好地理解:无论是通过复制还是强烈修改这种情况,结果都是相同的。接下来,我们将测试类型更改为可变的变量,然后查看它
分析:结果,可以看出,由于测试是可变字符串类型,因此可以修改其内容,因此堆中的位置不会改变。此时,我们直接直接新的内存块存储复制内容,因此我们看到String_copy地址已更改,但是String_strong属性地址的String_strong属性地址尚未更改(浅副本),或者指向测试地址。目前,当我们修改测试内容时,修改复制的字符串_copy值没有更改,但是Strong修改的String_strong内容已更改!我们使用下面的图片来描述它们在堆栈中的关系:这里我们反思它。当我们定义不变的NNString类型时,我们的最初意图是希望它不会改变,但是如果您使用强度对其进行修改,将会有一个strong的装饰。值得修改!在实际项目开发中,我们必须尝试尝试为了避免这种情况,因此在修改NSString类型时,我们需要使用复制来修改而不是强!
当我们为变量字符串mutableString_copy和mutableStrong_strong分配NSString测试变量的值时,程序警告,因此我们专注于分析由NSMutableString类型分配的变量和变量字符串属性,以复制和强。查看结果的性能。我们按以下方式编写代码:
同样,我们可以根据印刷地址看到,复制修改的mutableString是一个深拷贝,强度为轻拷贝,在修改了测试值之后,由强度修改的mutableString改变了!但是当我们尝试修改MutableString_copy属性时修改副本修改,如下:
结果,该程序在运行后崩溃。这是因为当我们使用副本修改nsmutablestring时,深拷贝是一个不变的字符串,副本被分配,在此处修改了副本后,返回实际上是不可变的。因此,在汇编期间,我还认为mutableString_copy是可变的。因此,崩溃的原因也是“试图使用附录的不变对象”,这与我们一致;尽管由强键修改的变量字符串很重要,这是为什么我们知道为什么它会改变,以便在开发过程中,胸部很清楚!
目前,让我们回顾一下本文开头提到的两个问题:
定义NSString类型时,请使用复制修饰符;当定义NSMutableString类型时,请使用强烈的修饰符;
https://www.jiashu.com/p/3cdfb083ca35
原始:https://juejin.cn/post/7096090636381585416
