Saya membaca catatan rilis untuk Xcode 4.4 dan memperhatikan ini:
LLVM 4.0 Compiler
Xcode sekarang termasuk Apple LLVM Compiler versi 4.0, termasuk fitur-fitur baru bahasaObjective-C berikut: [...]
- Sasaran-C literal: membuat literal untuk NSArray, NSDictionary, dan NSNumber, sama seperti literal untuk NSString
Saya tertarik dengan fitur ini. Ini tidak sepenuhnya jelas bagi saya betapa literal untuk NSString
bekerja dan bagaimana seseorang bisa menggunakannya pada NSArray
, NSDictionary
, danNSNumber
.
Apa detailnya?
objective-c
xcode
objective-c-literals
Pedro Mancheno
sumber
sumber
Jawaban:
Salinan kata demi kata dari http://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsdictionary-nsarray-and :
Objective-C literals: seseorang sekarang dapat membuat literal untuk NSArray, NSDictionary, dan NSNumber (seperti halnya seseorang dapat membuat literal untuk NSString)
NSArray Literals
Sebelumnya:
Sekarang:
NSDictionary Literals
Sebelumnya:
Sekarang:
NSNumber Literals
Sebelumnya:
Sekarang:
[Sunting]
zxoq di http://news.ycombinator.com/item?id=3672744 telah menambahkan langganan baru yang lebih menarik. (Ditambahkan dengan literal):
[Sunting 2]
Literal ObjC baru dibahas dalam beberapa sesi WWDC 2012 . Saya sengaja tidak menghapus nama file dan waktu setiap slide sehingga Anda dapat menemukannya sendiri jika Anda mau. Mereka pada dasarnya hal yang sama seperti yang dinyatakan dalam posting ini, tetapi ada juga beberapa hal baru yang akan saya sebutkan di atas gambar.
Harap perhatikan bahwa gambar semuanya besar. Cukup seret ke tab lain untuk melihatnya dalam ukuran aslinya
Bagian ini baru. Literal Ekspresi
Ketika Anda memiliki ekspresi (
M_PI / 16
misalnya), Anda harus meletakkannya di dalam tanda kurung.Sintaks ini berfungsi untuk ekspresi angka, boolean, menemukan indeks dalam string (C-), nilai boolean, konstanta enum, dan bahkan string karakter!
Lebih lanjut tentang string karakter dan bagaimana / kapan Anda dapat menggunakan sintaks literal ini:
Cara kerja literal array
Cara kerja kamus literal
Lebih lanjut tentang array subscript
Lebih lanjut tentang subskripsi kamus
[Sunting 3]
Mike Ash memiliki artikel bagus tentang literal baru ini. Jika Anda ingin tahu lebih banyak tentang hal ini, pastikan untuk memeriksanya .
sumber
{
dan[
, atau kata-kata umum sepertiarray
,id
dan@implementation
. Kata kunci yang relevan adalahliteral
,objc
danxcode
, bukan spesifik menyebutkan[
atau@implementation
. Anda tidak ingin pertanyaan ini muncul untuk permintaan ObjC umum di Google, itu hanya akan ditampilkan ketika seseorang bertanyaobjc literal
, yang terjadi saat ini (berkat judul dan tag).Compiler Objective-C memiliki pengetahuan hardcoded tentang tata letak memori instance
NSConstantString
kelas, alias__CFConstantString
kelas. PeriksaRewriteObjCStringLiteral
fungsi dilib/Rewrite/RewriteModernObjC.cpp
dalam kode sumber dentang. Kompilator hanya memancarkan data yang cocok dengan tata letak contohNSConstantString
kelas.Ada beberapa kemungkinan untuk literal
NSArray
danNSDictionary
contoh. Mereka dapat melakukan sesuatu seperti apa yang mereka lakukan untuk string literal - hardcode tata letak instance (untuk subkelas khusus) di kompiler dan memancarkan data dalam tata letak itu. Atau mereka dapat memiliki kode emisi kompiler yang hanya membuat instance saat runtime.sumber
NSArray
danNSDictionary
sangat berbeda dariNSString
. Kompiler hanya menghasilkan panggilan keNSDictionary
atauNSArray
saat runtime. Ini juga mengapa variabel global tidak dapat diinisialisasi menggunakan sintaks ini (tidak sepertiNSString
). Ini akan membutuhkan hasilnya menjadi konstanta waktu kompilasi.Dari "Objective-C Literals"
1)
NSNumber
,NSDictionary
danNSArray
literal tersedia dalam Xcode 4.4 .2)
NSDictionary
danNSArray
subskrip memerlukan " Xcode 4.4 dan OS X 10.8 atau lebih baru SDK " atau " Xcode 4.5 dan iOS 6 atau lebih baru SDK "Menurut saya, subskrip ini membutuhkan dukungan runtime dan karenanya tidak akan berfungsi sebelum iOS6 .
sumber