日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Swift通天遁地]七、数据与安全-(12)使用Instruments Leaks工具检测内存泄露

發布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Swift通天遁地]七、数据与安全-(12)使用Instruments Leaks工具检测内存泄露 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
?微信公眾號:山青詠芝(shanqingyongzhi)
?博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
?GitHub地址:https://github.com/strengthen/LeetCode
?原文地址:https://www.cnblogs.com/strengthen/p/10335778.html?
?如果鏈接不是山青詠芝的博客園地址,則可能是爬取作者的文章。
?原文已修改更新!強烈建議點擊原文地址閱讀!支持作者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

目錄:[Swift]通天遁地Swift

本文將演示使用Instruments Leaks工具檢測應用程序中的內存泄漏問題。

內存溢出 out of memory:是指程序在申請內存時,沒有足夠的內存空間供其使用,出現out of memory;比如申請了一個integer,但給它存了long才能存下的數,那就是內存溢出。

內存泄露 memory leak是指程序在申請內存后,無法釋放已申請的內存空間,一次內存泄露危害可以忽略,但內存泄露堆積后果很嚴重,無論多少內存,遲早會被占光。

在項目文件夾【DemoApp】上點擊鼠標右鍵,彈出右鍵菜單。

【New File】->【Swift File】->【Next】->【Save As】:People.swift->【Create】

1 import Foundation 2 //主人類 3 class People 4 { 5 //名稱屬性 6 var name : String 7 //主人的寵物 8 var pet : Pet? 9 10 //添加一個初始化方法,并以名稱作為參數 11 init(name:String) 12 { 13 //設置對象的名稱屬性 14 self.name = name 15 //初始化日志 16 print("People is initialized.") 17 } 18 19 //添加一個析構方法 20 deinit 21 { 22 //析構日志 23 print("People is deinitialized.") 24 } 25 }

使用相同的方式創建另一個類文件【Pet.swift】?

1 import Foundation 2 //寵物類 3 class Pet 4 { 5 //名稱屬性 6 var name : String 7 //寵物的主人屬性 8 var master : People? 9 10 //添加一個初始化方法,并以名稱作為參數 11 init(name:String) 12 { 13 //設置名稱屬性 14 self.name = name 15 //輸出初始化日志 16 print("Pet is initialized.") 17 } 18 19 //添加一個析構方法 20 deinit 21 { 22 //析構日志 23 print("Pet is deinitialized.") 24 } 25 }

在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】?

1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 9 //添加一個按鈕,當用戶點擊該按鈕時,創建主人對象和寵物對象。 10 let button = UIButton(frame: CGRect(x: 0, y: 0, width: 280, height: 44)) 11 //將按鈕控件放置在根視圖的中心位置 12 button.center = self.view.center 13 //設置正常狀態下的標題文字 14 button.setTitle("PeopleAndPet", for: .normal) 15 //設置按鈕的背景顏色為橙色 16 button.backgroundColor = UIColor.orange 17 //給按鈕綁定點擊事件 18 button.addTarget(self, 19 action: #selector(ViewController.peopleAndPet), 20 for: UIControl.Event.touchUpInside) 21 22 //設置根視圖的背景顏色 23 self.view.backgroundColor = UIColor.orange 24 //并把按鈕控件添加到根視圖 25 self.view.addSubview(button) 26 } 27 28 //添加一個方法,用來響應按鈕的點擊事件 29 @objc func peopleAndPet() 30 { 31 //添加一個主人對象和一個寵物對象 32 var master:People? 33 var dog:Pet? 34 35 //對兩個對象進行初始化操作,并設置它們的名稱屬性。 36 master = People(name: "Jerry") 37 dog = Pet(name: "Dog") 38 39 //設置主人的寵物屬性 40 //設置寵物的主人屬性 41 //使兩個對象相互引用, 42 //由于兩個對象互相引用,所以兩個對象并不會在內存中被釋放。 43 master!.pet = dog 44 dog!.master = master 45 46 //將兩個對象置空 47 master = nil 48 dog = nil 49 } 50 51 override func didReceiveMemoryWarning() { 52 super.didReceiveMemoryWarning() 53 // Dispose of any resources that can be recreated. 54 } 55 }

點擊【Product】->【Profile】->在彈出的性能分析模塊窗口中,選擇需要的模塊。

在此選擇【Leaks】->【Choose】

點擊左上角的記錄按鈕,開始運行程序。

應用程序啟動之后,在內存狀態時間圖譜上,顯示了一個泄露圖標,點擊此圖標顯示詳細的內存信息。

此時在內存泄露堆棧列表中,顯示了產生內存泄露的兩個對象。點擊選擇第一個對象。

然后點擊內存地址右側的小箭頭,顯示內存分配的歷史記錄。

在此記錄中,只看到了記錄分配的時間,而沒有內存被釋放的時間。

所以也證明了該對象的內存,確認未被釋放。

選擇列表中的周期和根選項【Cycles & Roots】,此時顯示了內存泄露的周期圖。

從圖中可以看出,內存泄露的問題是People對象和Pet對象循環引用造成的。

選擇列表中的調用樹選項選項【Call Tree】,

依次點擊標簽名稱左側的小箭頭,查看內存分配的歷史調用記錄。

點擊【設置】圖標,進行顯示選項設置面板。勾選【HideSystem Libraries】隱藏系統庫。

此時只顯示了開發者的調用記錄,鼠標雙擊標簽名稱。顯示了詳細的代碼信息。

點擊左上角的軟件圖標,返回Xcode。將Pet對象的引用修改為弱引用。

1 import Foundation 2 //主人類 3 class People 4 { 5 //名稱屬性 6 var name : String 7 //主人的寵物 8 //將寵物對象的引用修改為弱引用。 9 //就不會產生內存泄露的問題。 10 weak var pet : Pet? 11 12 //添加一個初始化方法,并以名稱作為參數 13 init(name:String) 14 { 15 //設置對象的名稱屬性 16 self.name = name 17 //初始化日志 18 print("People is initialized.") 19 } 20 21 //添加一個析構方法 22 deinit 23 { 24 //析構日志 25 print("People is deinitialized.") 26 } 27 }

點擊【Product】->【Profile】->【Leaks】->【Choose】

此時在內存分配時間圖譜上,顯示的是正確的內存分配和釋放圖標。

轉載于:https://www.cnblogs.com/strengthen/p/10335778.html

總結

以上是生活随笔為你收集整理的[Swift通天遁地]七、数据与安全-(12)使用Instruments Leaks工具检测内存泄露的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。