ios – swift如何处理内存中的nil值

ios – swift如何处理内存中的nil值,第1张

概述我知道当使用(强)引用时,ARC使用引用计数和编译器插入的递增和递减 *** 作.它在对象的最后一个引用组超出范围后清除内存. 我的问题包含有一个var: var key = NSData? 如果没有值,则默认为nil.现在我分配它之后再将值重新分配给nil – key = NSData().这会从以前存在的内存中删除该数据吗? 任何有用的文章将不胜感激. 当你写作 var key = NSData? 密 我知道当使用(强)引用时,ARC使用引用计数和编译器插入的递增和递减 *** 作.它在对象的最后一个引用组超出范围后清除内存.

我的问题包含有一个var:

var key = NSData?

如果没有值,则默认为nil.现在我分配它之后再将值重新分配给nil – key = NSData().这会从以前存在的内存中删除该数据吗?

任何有用的文章将不胜感激.

解决方法 当你写作

var key = NSData?

密钥变量创建到堆栈中,并为其分配nil值.

让我们说接下来你将一个对象分配给key

key = NSData()

现在,在Heap中创建了一个NSData类型的对象.并且该对象的地址被写入密钥变量(进入堆栈).
ARC还注意到,现在NSData对象的refereneCount为1,因为它由1个变量引用.

现在我们再次分配nil到key

key = nil

然后ARC检测到不再引用存在于堆中的NSData.
因此它的referenceCount降为0并且ARC将其从内存中删除(或者可能将Heap的区域标记为可以再次使用的可用内存).

什么时候对象被解除分配?

正如@AaronBrager指出的那样,对象不会立即从内存中释放出来.实际上,当自动释放池耗尽时,它会被释放.

以下示例确实显示了它

正如您所看到的,“end”打印确实在Person对象被释放之前发生.

总结

以上是内存溢出为你收集整理的ios – swift如何处理内存中的nil值全部内容,希望文章能够帮你解决ios – swift如何处理内存中的nil值所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1077765.html

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

发表评论

登录后才能评论

评论列表(0条)

保存