มีสองคุณลักษณะการจัดการหน่วยความจำใหม่สำหรับคุณสมบัตินำโดย ARC มีและstrong
weak
นอกเหนือจากcopy
สิ่งที่เห็นได้ชัดว่าแตกต่างอย่างสิ้นเชิงมีความแตกต่างระหว่างstrong
vs retain
และweak
vs assign
?
จากความเข้าใจของฉันความแตกต่างเพียงอย่างเดียวที่นี่คือweak
จะกำหนดnil
ให้กับตัวชี้ในขณะที่assign
ไม่ได้ซึ่งหมายความว่าโปรแกรมจะหยุดทำงานเมื่อฉันส่งข้อความไปยังตัวชี้เมื่อมีการเปิดตัว แต่ถ้าฉันใช้weak
สิ่งนี้จะไม่เกิดขึ้นเพราะข้อความที่ส่งถึงnil
จะไม่ทำอะไรเลย
ผมไม่ทราบว่าเกี่ยวกับความแตกต่างใด ๆ ระหว่างและstrong
retain
มีเหตุผลใดบ้างที่ฉันควรใช้assign
และretain
ในโครงการใหม่หรือเป็นประเภทที่ถูกคัดค้าน?
weak
และstrong
) และ 4 รอบคัดเลือกอายุการใช้งานตัวแปร ( __strong
, __weak
, __unsafe_unretained
, __autoreleasing
) ดู ARC Notes ด้านล่าง
assign
เมื่อคอมไพล์ด้วย ARC เป็นข้อผิดพลาด มีคำตอบที่ถูกลบมากมายเกี่ยวกับเรื่องนี้ ดูเหมือนว่าจะมีการเปลี่ยนแปลงก่อนที่จะปล่อยสุดท้าย unsafe_unretained
เป็นคุณลักษณะที่ต้องการสำหรับผู้ใช้งานยุคแรกของเราหลายคน สำหรับการพิสูจน์ว่าunsafe_unretained
เป็นแอตทริบิวต์ที่ถูกต้องให้ดูที่ "การเขียนโปรแกรมด้วย Objective-C" ของ Apple ภายใต้หัวข้อ "Encapsulating Data" ภายใต้หัวข้อย่อย "ใช้ Unsafe Unretained Reference for some Classes" ซึ่งกล่าวว่า: "สำหรับคุณสมบัตินี้หมายถึงการใช้แอตทริบิวต์ unsafe_unretained:"
strong
, และweak
unsafe_unretained