ฉันเพิ่งพยายามรวบรวมโครงการ Xcode รุ่นเก่า (ซึ่งใช้ในการรวบรวมได้ดี) และตอนนี้ฉันเห็นข้อผิดพลาดมากมายของแบบฟอร์มนี้:
error: writable atomic property 'someProperty' cannot pair a synthesized setter/getter with a user defined setter/getter
รูปแบบรหัสที่ทำให้เกิดข้อผิดพลาดเหล่านี้จะเป็นดังนี้:
// Interface:
@property (retain) NSObject * someProperty;
// Implementation:
@synthesize someProperty; // to provide the getter
- (void)setSomeProperty:(NSObject *)newValue
{
//..
}
ฉันเห็นได้ว่าเหตุใดจึงเกิดข้อผิดพลาดขึ้น ฉันบอกคอมไพเลอร์เพื่อสังเคราะห์ accessors คุณสมบัติของฉัน (ทั้งทะเยอทะยานและ setter) และหลังจากนั้นทันทีฉันแทนที่ตัวตั้งค่าด้วยตนเอง รหัสนั้นมีกลิ่นเล็กน้อย
ดังนั้นวิธีที่เหมาะสมในการทำเช่นนี้คืออะไร? ถ้าฉันใช้@dynamic
แทน@synthesize
ฉันจะต้องเขียนทะเยอทะยานเช่นกัน นั่นเป็นวิธีเดียวหรือไม่
atomic
คุณสมบัติได้หรือไม่ ในกรณีที่คุณสมบัติของอะตอมอาจเป็นความคิดที่ดีที่จะทำให้คู่ getter / setter ซิงค์กันกับกลยุทธ์การล็อค นี่เป็นเรื่องยากหากมีการสังเคราะห์ส่วนหนึ่งในขณะที่ส่วนอื่นเป็นรหัสที่กำหนดเอง