Apa yang dilambangkan oleh simbol @ di objektif-c?


141

Saya belajar objektif-c dan terus menabrak simbol @. Ini digunakan dalam skenario yang berbeda, misalnya pada awal string atau untuk mensintesis metode accessor.

Apa arti simbol @ di objektif-c?


mengapa @ digunakan sebelum @interface dan @end?
Lalit Kumar

Jawaban:


159

The @karakter tidak digunakan dalam C atau C ++ pengidentifikasi, sehingga digunakan untuk memperkenalkan kata kunci bahasa Objective-C dengan cara yang tidak akan bertentangan dengan kata kunci bahasa lain. Ini memungkinkan bagian "Objektif" dari bahasa untuk secara bebas bercampur dengan bagian C atau C ++.

Jadi dengan sangat sedikit pengecualian, setiap kali Anda melihat @dalam beberapa kode Objective-C, Anda melihat konstruksi Objective-C daripada konstruksi C atau C ++.

Pengecualian utama adalah id, Class, nil, dan Nil, yang umumnya dianggap sebagai kata kunci bahasa meskipun mereka mungkin juga memiliki typedefatau #definedi belakang mereka. Sebagai contoh, kompiler benar-benar memperlakukan idsecara khusus dalam hal aturan konversi tipe pointer yang berlaku untuk deklarasi, serta keputusan apakah akan menghasilkan hambatan penulisan GC.

Pengecualian lain in, out, inout, oneway, byref, dan bycopy; ini digunakan sebagai anotasi kelas penyimpanan pada parameter metode dan mengembalikan tipe untuk membuat Objek Terdistribusi lebih efisien. (Mereka menjadi bagian dari metode tanda tangan tersedia dari runtime, yang DO dapat melihat untuk menentukan bagaimana cerita bersambung terbaik transaksi.) Ada juga atribut dalam @propertydeklarasi, copy, retain, assign, readonly, readwrite, nonatomic, getter, dan setter; itu hanya valid dalam bagian atribut @propertydeklarasi.


4
Bisakah Anda menjelaskan sesuatu tentang apa yang dilakukan @ (ekspresi)? Ini satu-satunya item yang saya tidak mengerti dalam popup yang ditampilkan ketika saya mengetik @ di xcode.
jchnxu

10
@ (99) sama dengan [NSNomor numberWithInteger: 99]. @ (YES) sama dengan [NSNomor numberWithBool: YES]. Tanda @ adalah pintasan untuk membuat objek.
JoJo

7
Adakah orang lain yang bingung dengan kenyataan bahwa "jawaban" ini tidak benar-benar menjawab pertanyaan yang dinyatakan? Penanya mengatakan "apa arti '@' dalam Objective-C?" dan penjawab mengatakan, "Itu berarti Anda menggunakan Objective-C." Saya pikir dia sudah tahu banyak ...
Jon McClung

1
Agak sewenang-wenang; itu harus di set ASCII dasar dan belum digunakan oleh C ketika preprocessor Objective-C pertama sedang ditulis. Itu sebabnya @.
Chris Hanson

1
Jon McClung: Leo benar, tidak ada "makna yang lebih dalam." The @karakter itu tidak digunakan oleh C, jadi itu nyaman “escape hatch” untuk parsing alternatif yang juga diawetkan kompatibilitas 100% dengan kode C yang ada.
Chris Hanson

63

Dari Tutorial Objective-C: The @ Symbol , alasannya ada di depan berbagai kata kunci:

Menggunakan @ seharusnya memudahkan untuk menghubungkan kompiler Objective-C ke kompiler C yang ada. Karena @ tidak valid dalam konteks apa pun dalam C kecuali string literal, tokenizer (langkah awal dan sederhana dalam kompiler) dapat dimodifikasi untuk hanya mencari karakter @ di luar konstanta string (tokenizer memahami string literal , sehingga berada dalam posisi untuk membedakan ini). Ketika @ ditemui tokenizer akan menempatkan sisa kompiler dalam "mode Objective-C." (Pengurai Objective-C akan bertanggung jawab untuk mengembalikan kompiler kembali ke mode C biasa ketika mendeteksi akhir kode Objective-C).

Juga ketika dilihat di depan string literal, itu membuat NSString daripada 'char *' di C.


24

Dari Macrumors: Tutorial Objective-C , ketika di depan string literal:

Ada juga literal NSString @ "". Ini pada dasarnya singkatan untuk + stringWithUTF8String NSString.

@ Juga menambahkan dukungan unicode ke string C.


12
"Ini pada dasarnya adalah singkatan untuk + stringWithUTF8String NSString." Ya tidak. String dialokasikan secara statis, yang membuatnya berbeda dari +[NSString stringWithUTF8String:](yang dialokasikan secara dinamis), dan melepaskan dan mempertahankan tidak berpengaruh pada mereka.

16

Dari manual :

Kerangka obyektif-C biasanya tidak menggunakan string gaya-C. Sebagai gantinya, mereka melewatkan string sebagai objek NSString.

Kelas NSString menyediakan pembungkus objek untuk string yang memiliki semua kelebihan yang Anda harapkan, termasuk manajemen memori bawaan untuk menyimpan string panjang sewenang-wenang, dukungan untuk Unicode, utilitas format gaya printf, dan banyak lagi. Karena string semacam itu digunakan secara umum, Objective-C menyediakan notasi singkatan untuk membuat objek NSString dari nilai konstan. Untuk menggunakan steno ini, yang harus Anda lakukan adalah mendahului string normal, yang dikutip ganda dengan simbol @, seperti yang ditunjukkan dalam contoh berikut:

NSString *myString = @"My String\n";
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];

3
Tapi ini hanya satu contoh dari mana @digunakan. Saya melihat kode seperti ini: mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),... tidak ada hubungannya dengan NSString
GreenAsJade
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.