我的问题包含有一个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值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)