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?
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?
Jawaban:
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 typedef
atau #define
di belakang mereka. Sebagai contoh, kompiler benar-benar memperlakukan id
secara 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 @property
deklarasi, copy
, retain
, assign
, readonly
, readwrite
, nonatomic
, getter
, dan setter
; itu hanya valid dalam bagian atribut @property
deklarasi.
@
.
@
karakter itu tidak digunakan oleh C, jadi itu nyaman “escape hatch” untuk parsing alternatif yang juga diawetkan kompatibilitas 100% dengan kode C yang ada.
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.
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.
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"];
@
digunakan. Saya melihat kode seperti ini: mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),
... tidak ada hubungannya dengan NSString