Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 以不同方式创建数组时,取消初始化顺序不同_Arrays_Memory Management_Swift5_Deinit - Fatal编程技术网

Arrays 以不同方式创建数组时,取消初始化顺序不同

Arrays 以不同方式创建数组时,取消初始化顺序不同,arrays,memory-management,swift5,deinit,Arrays,Memory Management,Swift5,Deinit,TL;DR:为什么在与初始值一起创建数组时,会立即取消初始化值,但在创建数组后填充数组值会产生不同的行为 我正在学习JavaScript之后的Swift,它有GC,所以ARC和反初始化的概念对我来说有些新手。为了更深入地理解它,我基于以下代码编写了以下代码: //定义;有关用法,请参见下面两个代码段 班级银行{ 静态变量:Int=100{ 迪塞特{ 让差异=硬币-旧值 让符号=diff

TL;DR:为什么在与初始值一起创建数组时,会立即取消初始化值,但在创建数组后填充数组值会产生不同的行为


我正在学习JavaScript之后的Swift,它有GC,所以ARC和反初始化的概念对我来说有些新手。为了更深入地理解它,我基于以下代码编写了以下代码:

//定义;有关用法,请参见下面两个代码段
班级银行{
静态变量:Int=100{
迪塞特{
让差异=硬币-旧值
让符号=diff<0?-“:“+”
打印(“银行:\(旧值)\(符号)\(差异大小)=\(硬币)”)
}
}
静态func give(uAmount:Int,to user:user){

保护量TL;DR不依赖于解除分配/解除初始化定时

弄清楚何时发生解除分配,以及在此之前立即发生的取消初始化,是一个非常重要的过程

线程(几乎每个应用程序都是多线程的,即使它不直接使用线程)、编译器临时程序、传递值等等。所有这些都会在对象的最后一个引用消失时导致混淆

除此之外,由于其工作方式的原因,Swift Played本身可能会保留对对象的不明显引用,这就是这里发生的事情。将您的代码放入Swift命令行应用程序对我们来说是可行的,但YMMV


HTH

不确定这是否相关,但所有代码都在一个文件中(Swift的Xcode Playway)您是说反初始化时间是未记录的,直到实现?因为如果有记录,这正是我想知道的:)它本身并不是未记录的(尽管Swift规范中缺乏一定的严格性),但正如您刚刚发现的那样,准确确定对象的最后一次引用何时消失,从而满足deinit+dealloc的条件,通常是非常重要的,或者是不可能(例如,在并发的情况下)确定的。