มีสองคุณลักษณะการจัดการหน่วยความจำใหม่สำหรับคุณสมบัตินำโดย ARC มีและstrongweak
นอกเหนือจากcopyสิ่งที่เห็นได้ชัดว่าแตกต่างอย่างสิ้นเชิงมีความแตกต่างระหว่างstrongvs retainและweakvs assign?
จากความเข้าใจของฉันความแตกต่างเพียงอย่างเดียวที่นี่คือweakจะกำหนดnilให้กับตัวชี้ในขณะที่assignไม่ได้ซึ่งหมายความว่าโปรแกรมจะหยุดทำงานเมื่อฉันส่งข้อความไปยังตัวชี้เมื่อมีการเปิดตัว แต่ถ้าฉันใช้weakสิ่งนี้จะไม่เกิดขึ้นเพราะข้อความที่ส่งถึงnilจะไม่ทำอะไรเลย
ผมไม่ทราบว่าเกี่ยวกับความแตกต่างใด ๆ ระหว่างและstrongretain
มีเหตุผลใดบ้างที่ฉันควรใช้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, และweakunsafe_unretained