คนที่สามารถอธิบายให้ฉันในรายละเอียดเมื่อฉันต้องใช้แต่ละแอตทริบิวต์: nonatomic
, copy
, strong
, weak
และอื่น ๆ สำหรับสถานที่ให้บริการประกาศและอธิบายสิ่งที่แต่ละคนไม่? ตัวอย่างบางประเภทก็ยอดเยี่ยมเช่นกัน ฉันใช้ ARC
คนที่สามารถอธิบายให้ฉันในรายละเอียดเมื่อฉันต้องใช้แต่ละแอตทริบิวต์: nonatomic
, copy
, strong
, weak
และอื่น ๆ สำหรับสถานที่ให้บริการประกาศและอธิบายสิ่งที่แต่ละคนไม่? ตัวอย่างบางประเภทก็ยอดเยี่ยมเช่นกัน ฉันใช้ ARC
คำตอบ:
คำตอบนี้มีข้อผิดพลาดมากมายและล้าสมัยไปแล้ว โปรดดูคำถาม / คำตอบและความคิดเห็นอื่น ๆ
nonatomic
nonatomic
ใช้สำหรับวัตถุประสงค์หลายเธรด หากเราได้ตั้งค่าแอ็ตทริบิวต์ที่ไม่ใช่เชิงอะตอม ณ เวลาที่ประกาศดังนั้นเธรดอื่น ๆ ที่ต้องการเข้าถึงวัตถุนั้นสามารถเข้าถึงได้และให้ผลลัพธ์ที่เกี่ยวข้องกับมัลติเธรด
สำเนา
copy
จำเป็นเมื่อวัตถุไม่แน่นอน ใช้สิ่งนี้หากคุณต้องการคุณค่าของวัตถุตามที่เป็นอยู่ในขณะนี้และคุณไม่ต้องการให้ค่านั้นสะท้อนการเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นโดยเจ้าของวัตถุคนอื่น ๆ คุณจะต้องปล่อยวัตถุเมื่อเสร็จแล้วเพราะคุณยังคงรักษาสำเนา
กำหนด
Assign
copy
ค่อนข้างตรงกันข้ามกับ เมื่อเรียกใช้ getter ของassign
คุณสมบัติมันจะส่งคืนการอ้างอิงไปยังข้อมูลจริง โดยทั่วไปแล้วคุณใช้คุณลักษณะนี้เมื่อคุณมีคุณสมบัติประเภทดั้งเดิม (float, int, BOOL ... )
รักษา
retain
จำเป็นเมื่อแอตทริบิวต์เป็นตัวชี้ไปยังวัตถุ ตัวตั้งค่าที่สร้างโดย@synthesize
จะเก็บรักษา (หรือที่เรียกว่าเพิ่มจำนวนคงไว้ที่) วัตถุ คุณจะต้องปล่อยวัตถุเมื่อเสร็จแล้ว โดยใช้การเก็บรักษามันจะเพิ่มจำนวนการเก็บรักษาและครอบครองหน่วยความจำในสระว่ายน้ำอัตโนมัติ
แข็งแรง
strong
เป็นการแทนที่สำหรับแอ็ตทริบิวต์การเก็บรักษาซึ่งเป็นส่วนหนึ่งของ Objective-C Automated Reference Counting (ARC) ในรหัสที่ไม่ใช่ ARC เป็นเพียงคำพ้องสำหรับเก็บ
เป็นเว็บไซต์ที่ดีในการเรียนรู้strong
และweak
สำหรับ iOS 5
http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1
อ่อนแอ
weak
คล้ายกับstrong
ยกเว้นว่ามันจะไม่เพิ่มจำนวนการอ้างอิงด้วย 1 มันไม่ได้กลายเป็นเจ้าของวัตถุนั้น แต่เพิ่งมีการอ้างอิงถึงมัน หากจำนวนการอ้างอิงของวัตถุลดลงถึง 0 แม้ว่าคุณอาจจะยังคงชี้ไปที่นี่มันจะถูกจัดสรรคืนจากหน่วยความจำ
ลิงค์ด้านบนมีทั้งข้อมูลที่ดีเกี่ยวกับความอ่อนแอและความแข็งแกร่ง
nonatomic
หมายความว่าไม่ควรเข้าถึงหลายเธรดพร้อมกัน ค่าเริ่มต้นคือatomic
สิ่งที่ทำให้เธรดปลอดภัย
nonatomic
คุณสมบัติระบุว่าวัตถุไม่ปลอดภัยเธรดซึ่งหมายความว่าถ้าเธรดอื่นพยายามเข้าถึงวัตถุนี้มากกว่าสิ่งที่ไม่ดีสามารถเกิดขึ้นได้ แต่จะเร็วกว่าคุณสมบัติอะตอมมิกมาก
strong
ใช้กับ ARC และช่วยให้คุณโดยทั่วไปโดยไม่ต้องกังวลเกี่ยวกับจำนวนการเก็บรักษาของวัตถุ ARC จะเผยแพร่โดยอัตโนมัติเมื่อคุณทำเสร็จการใช้คำหลักstrong
หมายความว่าคุณเป็นเจ้าของวัตถุ
weak
ความเป็นเจ้าของหมายความว่าคุณไม่ได้เป็นเจ้าของมันและเพียงแค่ติดตามวัตถุจนกระทั่งวัตถุที่ได้รับมอบหมายให้อยู่ทันทีที่วัตถุที่สองถูกปล่อยออกมาก็จะสูญเสียคุณค่า สำหรับเช่น obj.a=objectB;
ถูกใช้และ a มีคุณสมบัติอ่อนกว่าค่าจะใช้ได้จนกว่า objectB จะยังคงอยู่ในหน่วยความจำ
copy
สถานที่ให้บริการอธิบายได้ดีมากที่นี่
strong,weak,retain,copy,assign
เป็นพิเศษร่วมกันดังนั้นคุณจึงไม่สามารถใช้พวกเขาบนวัตถุหนึ่งเดียว ... อ่าน"ประกาศ Properties"ส่วน
หวังว่าสิ่งนี้จะช่วยให้คุณออก ...
nonatomic
หมายถึงไม่มีการยกเว้นเท่านั้น ไม่ได้หมายความว่าการเข้าถึงไม่ปลอดภัยสำหรับเธรด นั่นคือรายละเอียดการนำไปใช้ที่atomic
vs. nonatomic
ไม่ได้จับ
ลิงค์นี้มีการทำลาย
http://clang.llvm.org/docs/AutomaticReferenceCounting.html#ownership.spelling.property
มอบหมายหมายถึง __unsafe_unretained ความเป็นเจ้าของ
การทำสำเนาหมายถึงการเป็นเจ้าของ __ ที่แข็งแกร่งเช่นเดียวกับพฤติกรรมตามปกติของซีแมนทิกส์เกี่ยวกับการคัดลอกในสุนัข
รักษาความหมายเป็นเจ้าของ __ ที่แข็งแกร่ง
แข็งแกร่งหมายถึงการเป็นเจ้าของ __ ที่แข็งแกร่ง
unsafe_unretained implies __unsafe_unretained ความเป็นเจ้าของ
อ่อนแอหมายถึง __ อ่อนแอเป็นเจ้าของ
คำตอบที่ดี! สิ่งหนึ่งที่ผมอยากจะชี้แจงลึก/nonatomic
atomic
ผู้ใช้ควรเข้าใจว่าคุณสมบัตินี้ - "atomicity" แพร่กระจายเฉพาะในการอ้างอิงของแอตทริบิวต์และไม่ได้อยู่ในเนื้อหา Ie atomic
จะรับประกันผู้ใช้งานแบบอะตอมมิกซิตี้สำหรับการอ่าน / การตั้งค่าตัวชี้และเฉพาะตัวชี้ไปยังแอตทริบิวต์ ตัวอย่างเช่น:
@interface MyClass: NSObject
@property (atomic, strong) NSDictionary *dict;
...
ในกรณีนี้จะรับประกันได้ว่าตัวชี้ไปยังdict
จะถูกอ่าน / ตั้งค่าในลักษณะอะตอมมิกโดยเธรดที่แตกต่างกัน แต่dict
ตัวมันเอง (พจนานุกรมdict
ชี้ไปที่) ยังคงเป็นเธรดที่ไม่ปลอดภัยนั่นคือการดำเนินการอ่าน / เพิ่มทั้งหมดในพจนานุกรมยังคงเป็นเธรดที่ไม่ปลอดภัย
หากคุณต้องการคอลเลกชันที่ปลอดภัยของเธรดคุณมีสถาปัตยกรรมที่ไม่ดี (บ่อยขึ้น) หรือความต้องการที่แท้จริง (หายาก) หากเป็น "ความต้องการที่แท้จริง" - คุณควรค้นหาส่วนประกอบคอลเลกชันเธรดที่ปลอดภัยและผ่านการทดสอบที่ดี & หรือเตรียมพร้อมสำหรับการทดลองและความยากลำบากที่เขียนด้วยตัวคุณเอง กรณีหลังดูที่ "ล็อคฟรี", "รอฟรี" กระบวนทัศน์ ดูเหมือนวิทยาศาสตร์จรวดในแวบแรก แต่สามารถช่วยให้คุณประสบความสำเร็จในการทำงานที่ยอดเยี่ยมเมื่อเทียบกับ "ล็อคปกติ"