Listing 49-1you have coded two classes, Project and Task, each of whic การแปล - Listing 49-1you have coded two classes, Project and Task, each of whic ไทย วิธีการพูด

Listing 49-1you have coded two clas

Listing 49-1you have coded two classes, Project and Task, each of which have deinit methods that will execute right before these instances are disposed of.
Note Instead of a delegate property in Task, you have a property named parent, which is an optional Project type that a Task instance may use to get information about the project that the Task instance belongs to. Finally, when you instantiate your Project and Task instances, you declare the Project instance as optional. You declare Project as optional because you need to set this instance to nil at the end to dispose of the instance.
When you build and run the application in Listing 49-1, it seems to run fine. But, if you look at the console log, you will notice that no messages were written out even though you expected some. This means the code in deinit was never reached and these five Task instances were never disposed of. This is a memory leak.
You could solve this problem by removing the line of code that assigns the Project instance to the parent property for each Task instance (Listing 49-2).
Listing 49-2. Removing strong Reference
var p:Project? = Project0 pi.name = "Cook Dinner"
let taskNames = ["Choose Menu", "Buy Groceries", "Prepare Ingredients", "Cook Food"]
for name in taskNames{ var t = Task() t.name = name //t.parent = p p!.listOfTasks.append(t)
}
p = nil
When you comment out the line from Listing 49-2, you will get the following output in the console log:
Cook Dinner project is being deinitialized Choose Menu task is being deinitialized Buy Groceries task is being deinitialized Prepare Ingredients task is being deinitialized Cook Food task is being deinitialized
0/5000
จาก: -
เป็น: -
ผลลัพธ์ (ไทย) 1: [สำเนา]
คัดลอก!
รายการ 49 1you มีรหัส 2 ชั้น โครงการและภารกิจ ซึ่งมีวิธีการ deinit ที่จะดำเนินทางขวาก่อนที่อินสแตนซ์เหล่านี้จะขายทิ้งหมายเหตุแทนของคุณสมบัติผู้รับมอบสิทธิ์ในงาน คุณมีคุณสมบัติชื่อหลัก ซึ่งเป็นชนิดโครงการไม่จำเป็นที่มีอินสแตนซ์ของงานอาจใช้เพื่อดูข้อมูลเกี่ยวกับโครงการที่อยู่ในอินสแตนซ์ของงาน สุดท้าย เมื่อคุณสร้างอินสแตนซ์ของอินสแตนซ์ของโครงการและภารกิจ คุณประกาศอินสแตนซ์ของโครงการเป็นตัวเลือก คุณประกาศโครงการเป็นตัวเลือกเนื่องจากคุณต้องตั้งอินสแตนซ์นี้ nil นั่นที่สุดในการกำจัดของอินสแตนซ์เมื่อคุณสร้าง และเรียกใช้โปรแกรมประยุกต์ในรายการ 49-1 มันดูเหมือนทำดี แต่ ถ้าคุณดูแฟ้มบันทึกคอนโซล คุณจะสังเกตเห็นว่า ข้อความที่ไม่ได้เขียนออกแม้คาดว่าบาง นี้หมายความว่า ไม่ถึงรหัสใน deinit และอินสแตนซ์ของงานเหล่านี้ห้ามีไม่ขายทิ้ง การรั่วไหลของหน่วยความจำอยู่คุณสามารถแก้ปัญหานี้ โดยเอาบรรทัดของรหัสที่กำหนดตัวอย่างโครงการคุณสมบัติหลักสำหรับอินสแตนซ์แต่ละงาน (49-2 รายการ)รายการที่ 49-2 เอาอ้างอิงที่แข็งแรงvar p:Project = Project0 pi.name = "อาหารเย็น"ให้ taskNames = ["เลือกเมนู" "ซื้ออาหาร" "เตรียมส่วนผสม" "ทำอาหาร"]สำหรับชื่อใน taskNames { var t = Task() t.name =ชื่อ //t.parent = p p ! listOfTasks.append(t)}p = nil นั่นเมื่อคุณแสดงความคิดเห็นออกบรรทัดจากรายการ 49-2 คุณจะได้รับผลลัพธ์ต่อไปนี้ในบันทึกของคอนโซล:โครงการอาหารปรุงอาหารเป็นการ deinitialized เลือกเมนูงาน deinitialized ซื้อร้านขายของชำที่งาน deinitialized เตรียมส่วนผสมการงาน deinitialized ปรุงอาหารเป็นการ deinitialized งาน
การแปล กรุณารอสักครู่..
ผลลัพธ์ (ไทย) 2:[สำเนา]
คัดลอก!
Listing 49-1you ได้เข้ารหัสสองชั้นโครงการและการงานของแต่ละคนที่ได้ deinit วิธีการที่จะดำเนินการก่อนที่กรณีเหล่านี้จะถูกกำจัด.
หมายเหตุแทนที่จะทรัพย์สินของผู้ร่วมประชุมในงานคุณจะมีคุณสมบัติที่กำหนดชื่อผู้ปกครองซึ่งเป็นตัวเลือก ประเภทโครงการที่เช่นงานอาจใช้เพื่อให้ได้ข้อมูลเกี่ยวกับโครงการที่เช่นงานเป็น สุดท้ายเมื่อคุณยกตัวอย่างกรณีโครงการและการงานของคุณคุณประกาศเช่นโครงการเป็นตัวเลือก คุณประกาศโครงการเป็นตัวเลือกเพราะคุณจะต้องกำหนดเช่นนี้จะไม่มีที่สิ้นสุดในการกำจัดของตัวอย่าง.
เมื่อคุณสร้างและเรียกใช้โปรแกรมประยุกต์ในรายชื่อ 49-1 ดูเหมือนว่าจะทำงานได้ดี แต่ถ้าคุณมองไปที่บันทึกคอนโซลคุณจะพบว่าไม่มีข้อความถูกเขียนออกมาแม้ว่าคุณคาดหวังบางอย่าง ซึ่งหมายความว่าในรหัส deinit ก็ไม่เคยมาถึงและเหล่านี้ห้ากรณีงานไม่เคยถูกทิ้ง นี้เป็นหน่วยความจำรั่ว.
คุณสามารถแก้ปัญหานี้โดยการลบบรรทัดของรหัสที่กำหนดเช่นโครงการสถานที่ให้บริการผู้ปกครองสำหรับแต่ละเช่นงาน (Listing 49-2).
Listing 49-2 การถอดอ้างอิงที่แข็งแกร่ง
var พี: โครงการ? = Project0 pi.name = "อาหารค่ำคุก"
ให้ taskNames = ["เลือกเมนู", "ซื้อร้านขายของชำ", "เตรียมส่วนผสม", "แม่ครัวอาหาร"]
สำหรับชื่อใน taskNames {var t = งาน () t.name name = //t.parent = หน้า .listOfTasks.append (t)
}
p = ศูนย์
เมื่อคุณแสดงความคิดเห็นออกเส้นจากรายการ 49-2, คุณจะได้รับการส่งออกต่อไปนี้ในคอนโซลบันทึก:
โครงการอาหารค่ำคุกจะถูก deinitialized เลือกเมนู งานจะถูก deinitialized งานที่ร้านขายของชำซื้อจะถูก deinitialized งานเตรียมส่วนผสมจะถูก deinitialized งานอาหารคุกจะถูก deinitialized
การแปล กรุณารอสักครู่..
ผลลัพธ์ (ไทย) 3:[สำเนา]
คัดลอก!
รายการ 49-1you มีรหัส 2 ชั้นโครงการและงานของแต่ละที่ได้ deinit วิธีการที่จะดำเนินการก่อน กรณีเหล่านี้ทิ้ง .
หมายเหตุแทนของตัวแทนอสังหาริมทรัพย์ในงาน คุณมีทรัพย์สินชื่อผู้ปกครอง ซึ่งเป็นโครงการประเภทที่เลือกงาน เช่นอาจจะใช้เพื่อให้ได้ข้อมูลเกี่ยวกับโครงการ งานตัวอย่างเป็นของ ในที่สุดเมื่อคุณยกตัวอย่างโครงการของคุณและงานอินสแตนซ์ คุณประกาศโครงการตัวอย่างที่เลือก คุณประกาศโครงการที่เลือกเพราะคุณต้องตั้งค่าตัวอย่างนี้จะไม่มีที่สิ้นสุด กำจัดเช่น
เมื่อคุณสร้างและเรียกใช้โปรแกรมประยุกต์ในรายการ 49-1 ดูเหมือนจะวิ่งดี แต่ถ้าคุณดูที่คอนโซลเข้าสู่ระบบคุณจะสังเกตได้ว่า ไม่มีข้อความที่เขียนไว้ออกแม้ว่าคุณคาดหวังบางอย่าง หมายถึงรหัสใน deinit เคยถึงและเหล่านี้ 5 งานอินสแตนซ์ไม่เคยถูกกำจัด นี้เป็นหน่วยความจำรั่ว .
คุณสามารถแก้ปัญหานี้โดยการเอาบรรทัดของรหัสที่กำหนดโครงการอินสแตนซ์ไปยังผู้ปกครอง คุณสมบัติแต่ละงานอินสแตนซ์ ( รายการ 49-2 ) .
รายการ 49-2 .เอาแข็งแรงอ้างอิง
var P : โครงการ = = " project0 pi.name ทำอาหารเย็นให้ tasknames = [ "
" เลือกเมนู " " ซื้อของ " , " เตรียมส่วนผสม " " ทำอาหาร " ]
ชื่อใน tasknames { var t = task() t.name = / ชื่อ / t.parent = P P ! . listoftasks . ผนวก ( T )
}
p = 0
เมื่อคุณแสดงความคิดเห็นออกบรรทัดจากรายการ 49-2 , คุณจะได้รับการแสดงผลในคอนโซลเข้าสู่ระบบดังต่อไปนี้ :
ทำโครงการอาหารเย็นถูก deinitialized เลือกงานเมนูถูก deinitialized ซื้องานของถูก deinitialized เตรียมวัสดุงานถูก deinitialized ทำอาหารงานถูก deinitialized
การแปล กรุณารอสักครู่..
 
ภาษาอื่น ๆ
การสนับสนุนเครื่องมือแปลภาษา: กรีก, กันนาดา, กาลิเชียน, คลิงออน, คอร์สิกา, คาซัค, คาตาลัน, คินยารวันดา, คีร์กิซ, คุชราต, จอร์เจีย, จีน, จีนดั้งเดิม, ชวา, ชิเชวา, ซามัว, ซีบัวโน, ซุนดา, ซูลู, ญี่ปุ่น, ดัตช์, ตรวจหาภาษา, ตุรกี, ทมิฬ, ทาจิก, ทาทาร์, นอร์เวย์, บอสเนีย, บัลแกเรีย, บาสก์, ปัญจาป, ฝรั่งเศส, พาชตู, ฟริเชียน, ฟินแลนด์, ฟิลิปปินส์, ภาษาอินโดนีเซี, มองโกเลีย, มัลทีส, มาซีโดเนีย, มาราฐี, มาลากาซี, มาลายาลัม, มาเลย์, ม้ง, ยิดดิช, ยูเครน, รัสเซีย, ละติน, ลักเซมเบิร์ก, ลัตเวีย, ลาว, ลิทัวเนีย, สวาฮิลี, สวีเดน, สิงหล, สินธี, สเปน, สโลวัก, สโลวีเนีย, อังกฤษ, อัมฮาริก, อาร์เซอร์ไบจัน, อาร์เมเนีย, อาหรับ, อิกโบ, อิตาลี, อุยกูร์, อุสเบกิสถาน, อูรดู, ฮังการี, ฮัวซา, ฮาวาย, ฮินดี, ฮีบรู, เกลิกสกอต, เกาหลี, เขมร, เคิร์ด, เช็ก, เซอร์เบียน, เซโซโท, เดนมาร์ก, เตลูกู, เติร์กเมน, เนปาล, เบงกอล, เบลารุส, เปอร์เซีย, เมารี, เมียนมา (พม่า), เยอรมัน, เวลส์, เวียดนาม, เอสเปอแรนโต, เอสโทเนีย, เฮติครีโอล, แอฟริกา, แอลเบเนีย, โคซา, โครเอเชีย, โชนา, โซมาลี, โปรตุเกส, โปแลนด์, โยรูบา, โรมาเนีย, โอเดีย (โอริยา), ไทย, ไอซ์แลนด์, ไอร์แลนด์, การแปลภาษา.

Copyright ©2024 I Love Translation. All reserved.

E-mail: