@ Sembolü objektif-c'de neyi temsil eder?


141

Objektif-c öğreniyorum ve @ sembolüne çarpmaya devam ediyorum. Farklı senaryolarda, örneğin bir dizenin başlangıcında veya erişimci yöntemlerini sentezlemek için kullanılır.

Objektif-c'de @ sembolü ne anlama geliyor?


@ @ neden @ arayüz ve @ sondan önce kullanılır?
Lalit Kumar

Yanıtlar:


159

@Bir bakıma Objective-C dili anahtar kelimeleri tanıtmak için kullanılan böylece karakter, C veya C ++ tanımlayıcıları kullanılmadığını olacak diğer dilde anahtar kelimelerle değil çatışma. Bu, dilin "Objective" kısmının C veya C ++ kısmıyla serbestçe karışmasını sağlar.

Bu nedenle, çok az istisna dışında, @bazı Objective-C kodlarında her gördüğünüzde , C veya C ++ yapıları yerine Objective-C yapılarına bakıyorsunuzdur.

Önemli istisnalar vardır id, Class, nil, ve Nil, genel olarak dil anahtar kelimeler olarak kabul edildiği onlar da bir sahip olsa bile typedefveya #definearkalarında. Örneğin, derleyici aslında idbildirimlere ve GC yazma engellerinin oluşturulup oluşturulmayacağına karar vermek için uyguladığı işaretçi türü dönüştürme kuralları açısından özel olarak davranır .

Diğer istisnalar vardır in, out, inout, oneway, byref, ve bycopy; bunlar Dağıtılmış Nesneleri daha verimli hale getirmek için yöntem parametresi ve dönüş türleri üzerinde depolama sınıfı ek açıklamaları olarak kullanılır. (Onlar DO nasıl en iyi serialize için bir işlem belirlemek için bakabilirsiniz çalışma zamanı, temin yöntemi imzanın parçası olurlar.) Özelliklerin, de vardır @propertybildirimleri, copy, retain, assign, readonly, readwrite, nonatomic, getter, ve setter; bunlar yalnızca bir @propertybildirimin öznitelik bölümünde geçerlidir .


4
@ (İfade) 'nin ne yaptığı hakkında bir şeyler açıklayabilir misiniz? Xcode'a @ yazdığımda gösterilen açılır pencerede anlamadığım tek öğe.
jchnxu

10
@ (99), [NSNumber numberWithInteger: 99] ile aynıdır. @ (YES), [NSNumber numberWithBool: YES] ile aynıdır. @ İşareti, nesneler oluşturmak için bir kısayoldur.
JoJo

7
Bu "cevabın" belirtilen soruya gerçekten cevap vermemesi gerçeği ile karışan var mı? Asker "Objective-C'de '@' ne anlama geliyor?" Diyor. ve cevaplayan "Objective-C kullandığınız anlamına gelir" der. Bence o kadar çok şey biliyordu ...
Jon McClung

1
Bir çeşit keyfi; temel ASCII setinde olması ve ilk Objective-C ön işlemcisi yazılırken C tarafından kullanılmamış olması gerekiyordu. Bu yüzden @.
Chris Hanson

1
Jon McClung: Leo haklı, “daha ​​derin bir anlam” yok. @O da mevcut C kodu ile% 100 uyumluluk korunmuş alternatif ayrıştırma için uygun bir “kaçış yolun” bu yüzden karakter, C kullanılmayan oldu.
Chris Hanson

63

Gönderen @ Sembol: Objective-C Öğreticisi , çeşitli anahtar kelimeler önündeki olduğunu sebeple:

@ Kullanmak, Objective-C derleyicisini mevcut bir C derleyicisine bağlamayı kolaylaştırmalıdır. @, C'de bir dize değişmez değeri dışında hiçbir bağlamda geçerli olmadığından, belirteç (derleyicideki erken ve basit bir adım), bir dize sabitinin dışındaki @ karakterini arayacak şekilde değiştirilebilir (belirteç dize değişmezlerini anlar , bu yüzden bunu ayırt edecek bir konumda). @ İle karşılaşıldığında tokenizer derleyicinin geri kalanını "Objective-C moduna" sokar. (Objective-C ayrıştırıcısı, Objective-C kodunun sonunu algıladığında derleyiciyi normal C moduna döndürmekten sorumlu olacaktır).

Ayrıca bir dize değişmezinin önünde göründüğünde, C'de bir 'char *' yerine bir NSString yapar.


24

Gönderen MacRumors: Objective-C Öğreticisi , ne zaman dize önünde:

@ "" NSString değişmez değerleri de var. Temelde NSString'in + stringWithUTF8String yöntemi için kısaltmadır.

@ Ayrıca C dizelerine unicode desteği de ekler.


12
"Temelde NSString'in + stringWithUTF8String yöntemi için kısayoldur." Tam olarak değil. Dizeler statik olarak ayrılır, bu da onları +[NSString stringWithUTF8String:](dinamik olarak ayrılır) farklı kılar ve serbest bırakma ve tutmanın bunlar üzerinde hiçbir etkisi yoktur.

16

Gönderen manuel :

Objective-C çerçeveleri genellikle C tarzı dizeler kullanmaz. Bunun yerine, dizeleri NSString nesneleri olarak geçirirler.

NSString sınıfı, rastgele uzunluklu dizeleri saklamak için yerleşik bellek yönetimi, Unicode desteği, printf tarzı biçimlendirme yardımcı programları ve daha fazlası dahil olmak üzere, beklediğiniz tüm avantajlara sahip dizeler için bir nesne sarmalayıcı sağlar. Bu tür dizeler yaygın olarak kullanıldığından, Objective-C sabit değerlerden NSString nesneleri oluşturmak için steno gösterimi sağlar. Bu stenoyu kullanmak için, aşağıdaki örneklerde gösterildiği gibi yapmanız gereken tek şey @ simgesiyle normal, çift tırnaklı bir dizedir:

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

3
Ancak bu, nerede @kullanıldığının sadece bir örneğidir . Böyle bir koda bakıyorum: mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),... NSString ile ilgisi yok
GreenAsJade
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.