大佬教程收集整理的这篇文章主要介绍了ios – Swift Dictionary荒谬的内存使用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
override func viewDidLoad() { let Dictionary = ["key1":"value1"] let nsKey: NSString = "key1" let swiftKey = nsKey as String for _ in 0 ... 10000000 { DictionarY[swiftKey] } }
重复访问字典会导致内存爬升,直到循环结束.我查看了仪器并看到了大量的字符串分配.事实证明使用NSString是个问题.
将nsKey更改为swift字符串就像这样修复了问题:
let nsKey = "key1"
let Dictionary: NSDictionary = ["key1":"value1"]
有谁知道为什么使用铸造的NSString访问字典会导致如此多的堆分配,除了上面描述的那些之外还有其他任何修复吗?
这是一些照片.看起来幕后的字符串被分配并设置为自动释放(或者我是否正在读取下面的数据错误?)这可能是为什么内存使用会不断分配然后在以后耗尽?如果这是真的,这应该被视为“错误”吗? OS X和iOS上都会出现此问题.
但是,在任何情况下,在这样的循环中,出于某种原因创建临时副本是非常常见的(即使您避免了这个特定问题).要解决这个问题,您需要在循环中消耗自动释放池.例如:
let Dictionary = ["key1":"value1"] let nsKey: NSString = "key1" let swiftKey = nsKey as String for _ in 0 ... 10000000 { autoreleasepool { // <=== the scope of the current pool DictionarY[swiftKey] } }
以上是大佬教程为你收集整理的ios – Swift Dictionary荒谬的内存使用全部内容,希望文章能够帮你解决ios – Swift Dictionary荒谬的内存使用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。