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?
objective-c
Benedict Cohen
sumber
sumber
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
, danNil
, yang umumnya dianggap sebagai kata kunci bahasa meskipun mereka mungkin juga memilikitypedef
atau#define
di belakang mereka. Sebagai contoh, kompiler benar-benar memperlakukanid
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
, danbycopy
; 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
, dansetter
; itu hanya valid dalam bagian atribut@property
deklarasi.sumber
@
.@
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:
Juga ketika dilihat di depan string literal, itu membuat NSString daripada 'char *' di C.
sumber
Dari Macrumors: Tutorial Objective-C , ketika di depan string literal:
@ Juga menambahkan dukungan unicode ke string C.
sumber
+[NSString stringWithUTF8String:]
(yang dialokasikan secara dinamis), dan melepaskan dan mempertahankan tidak berpengaruh pada mereka.Dari manual :
sumber
@
digunakan. Saya melihat kode seperti ini:mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),
... tidak ada hubungannya dengan NSString