ฉันกำลังเรียนรู้ถึงวัตถุประสงค์ -c และยังคงชนกับสัญลักษณ์ @ มันถูกใช้ในสถานการณ์ต่าง ๆ ตัวอย่างเช่นตอนต้นของสตริงหรือวิธีการสังเคราะห์ accessor
สัญลักษณ์ @ หมายถึงอะไรในวัตถุประสงค์ -c
ฉันกำลังเรียนรู้ถึงวัตถุประสงค์ -c และยังคงชนกับสัญลักษณ์ @ มันถูกใช้ในสถานการณ์ต่าง ๆ ตัวอย่างเช่นตอนต้นของสตริงหรือวิธีการสังเคราะห์ accessor
สัญลักษณ์ @ หมายถึงอะไรในวัตถุประสงค์ -c
คำตอบ:
@
ตัวละครที่ไม่ได้ใช้ใน C หรือ C ++ ตัวระบุดังนั้นจึงใช้ในการแนะนำคำหลักภาษา Objective-C ในทางที่จะไม่ขัดแย้งกับคำภาษาอื่น ๆ สิ่งนี้ทำให้ส่วน "วัตถุประสงค์" ของภาษาสามารถผสมกับ C หรือ C ++ ได้อย่างอิสระ
ดังนั้นด้วยข้อยกเว้นน้อยมากเมื่อใดก็ตามที่คุณเห็น@
ในโค้ด Objective-C บางอันคุณกำลังดูที่การสร้าง Objective-C แทนที่จะสร้าง C หรือ C ++
ข้อยกเว้นที่สำคัญid
, Class
, nil
และNil
ซึ่งได้รับการรักษาโดยทั่วไปเป็นคำหลักภาษาถึงแม้ว่าพวกเขาอาจมีtypedef
หรือ#define
อยู่เบื้องหลังพวกเขา ตัวอย่างเช่นคอมไพเลอร์จริง ๆ แล้วปฏิบัติid
เป็นพิเศษในแง่ของกฎการแปลงประเภทตัวชี้ที่ใช้กับการประกาศเช่นเดียวกับการตัดสินใจว่าจะสร้างอุปสรรคการเขียน GC
ข้อยกเว้นอื่น ๆ ที่มีin
, out
, inout
, oneway
, byref
และbycopy
; สิ่งเหล่านี้ถูกใช้เป็นหมายเหตุประกอบคลาสหน่วยเก็บข้อมูลเกี่ยวกับพารามิเตอร์ method และชนิดส่งคืนเพื่อให้ Distributed Objects มีประสิทธิภาพมากขึ้น (พวกเขากลายเป็นส่วนหนึ่งของลายเซ็นวิธีที่มีอยู่จากรันไทม์ที่ไม่สามารถดูเพื่อกำหนดวิธีการที่ดีที่สุดเป็นอันดับธุรกรรม.) นอกจากนี้ยังมีคุณลักษณะภายใน@property
ประกาศcopy
, retain
, assign
, readonly
, readwrite
, nonatomic
, getter
และsetter
; สิ่งเหล่านี้ใช้ได้ภายในส่วนของการ@property
ประกาศ
@
นั่นเป็นเหตุผลที่มันเป็น
@
ตัวละครก็ไม่ได้ใช้โดย C ดังนั้นมันจึงเป็นความสะดวกสบาย“หลบหนีฟัก” เพื่อแยกทางเลือกที่ยังเก็บรักษาไว้เข้ากันได้ 100% ด้วยรหัส C ที่มีอยู่
จากการสอน Objective-C: สัญลักษณ์ @เหตุผลที่อยู่ด้านหน้าคำหลักต่าง ๆ :
การใช้ @ ควรช่วยให้การคอมไพเลอร์ Objective-C ง่ายขึ้นในการคอมไพเลอร์ C ที่มีอยู่ เนื่องจาก @ ไม่ถูกต้องในบริบทใด ๆ ใน C ยกเว้นสตริงตัวอักษร tokenizer (ขั้นตอนแรกและเรียบง่ายในคอมไพเลอร์) จึงสามารถแก้ไขได้เพื่อค้นหาอักขระ @ นอกค่าคงที่สตริง (tokenizer เข้าใจสตริงตัวอักษร ดังนั้นจึงอยู่ในตำแหน่งที่จะแยกแยะความแตกต่างนี้) เมื่อพบ @ tokenizer จะทำให้ส่วนที่เหลือของคอมไพเลอร์ใน "โหมด Objective-C" (ตัวแยกวิเคราะห์ Objective-C จะรับผิดชอบในการคืนค่าคอมไพเลอร์กลับสู่โหมด C ปกติเมื่อตรวจพบจุดสิ้นสุดของรหัส Objective-C)
นอกจากนี้เมื่อเห็นหน้าสตริงตัวอักษรมันทำให้ NSString มากกว่า 'char *' ใน C
จากMacrumors: Objective-C Tutorialเมื่ออยู่ข้างหน้าตัวอักษร:
นอกจากนี้ยังมีตัวอักษร NSString ของ @ "" มันเป็นชวเลขเป็นหลักสำหรับวิธีการ + stringWithUTF8String ของ NSString
The @ ยังเพิ่มการสนับสนุน unicode ให้กับสตริง C
จากคู่มือ :
โดยทั่วไปแล้ว Objective-C frameworks จะไม่ใช้สตริง C-style แต่จะส่งผ่านสตริงไปเป็นวัตถุ NSString แทน
คลาส NSString จัดเตรียม object wrapper สำหรับสตริงที่มีข้อดีทั้งหมดที่คุณคาดหวังรวมถึงการจัดการหน่วยความจำในตัวสำหรับการจัดเก็บสตริงความยาวโดยพลการสนับสนุน Unicode ยูทิลิตี้การจัดรูปแบบสไตล์การพิมพ์และอื่น ๆ เนื่องจากสตริงดังกล่าวมีการใช้งานทั่วไปแม้ว่า Objective-C จะมีสัญลักษณ์แบบย่อสำหรับการสร้างวัตถุ NSString จากค่าคงที่ ในการใช้ชวเลขนี้สิ่งที่คุณต้องทำคือนำหน้าสตริงปกติที่มีเครื่องหมายอัญประกาศคู่ที่มีสัญลักษณ์ @ ดังแสดงในตัวอย่างต่อไปนี้:
NSString *myString = @"My String\n"; NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
@
ใช้งาน ฉันกำลังดูโค้ดดังนี้: mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),
... ไม่มีอะไรเกี่ยวข้องกับ NSString