2008-08-25 21 views

cevap

153

bir 'char *' den bir NSString yapar Objective-C dil anahtar kelimelerini diğer dillerin anahtar kelimeleriyle çakışmayacak şekilde tanıtmak. Bu, dilin "Hedef" kısmının C veya C++ kısmı ile serbestçe karışmasını sağlar.

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

önemli istisnalar da typedef veya arkalarında #define bir sahip olsa bile, genellikle dil anahtar kelimeler olarak kabul edilir id, Class, nil ve Nil vardır. Örneğin, derleyici aslında GC yazma engelleri oluşturmak için olup olmadığı kararına olarak, özel olarak bu bildirimleri için de geçerlidir işaretçi tip dönüşüm kuralları açısından id tedavi yoktur.

diğer durumlar, in olan out, inout, oneway, byref ve bycopy; Bunlar, yöntem parametresi üzerinde depolama sınıfı ek açıklamaları ve Dağıtılmış Nesneleri daha verimli hale getirmek için döndürme türleri olarak kullanılır. (Onlar bakabilirsiniz DO çalışma zamanı, temin yöntemi imzanın parçası haline iyi bir işlemi seri hale getirilmeye belirlemek için.) @property bildirimleri, copy, retain, assign, readonly, readwrite, nonatomic, getter özelliklerin, de vardır ve setter; Bunlar sadece @property beyanının öznitelik bölümünde geçerlidir.

Macrumors: Objective-C Tutorial itibaren
+2

@ (expression) ifadesinin ne hakkında olduğunu açıklayabilir misiniz? @ Xcode yazarken açılan pencerede anlamadığım tek öğe. – jchnxu

+6

@ (99), [NSNumber numberWithInteger: 99] ile aynıdır. @ (YES), [NSNumber numberWithBool: YES] ile aynıdır. @ Işareti, nesne oluşturmanın kısayoludur. – JoJo

+0

'NSLog (@"% @,% @ ", [@ (9) sınıf], [@ [@ (1), @ (2)] sınıf])' '__NSCFNumber çıktı, __NSArrayI' – Nianliang

58

, çeşitli anahtar kelimeler önündeki olmasının sebebi:

daha kolay varolan C derleyicisi için bir Objective-C derleyicisi ayrılmak mı yapmalıdır @ kullanma. @ Bir dize dışında edebi C herhangi bir bağlamda geçerli olmadığından, tokenizer (derleyici erken ve basit adım) basitçe sabit bir dize dışında @ karakteri aramak için değiştirilmiş olabilir (tokenizer dize hazır anlar bu yüzden bunu ayırt edecek bir pozisyondadır). @ Ile karşılaşıldığında tokenizer, derleyicinin geri kalanını "Objective-C mode" içine koyardı. (Objective-C ayrıştırıcısı, Objective-C kodunun sonunu algıladığında derleyiciyi tekrar normal C moduna döndürmekten sorumlu olacaktır). Nasıl kullanılır böylece Ayrıca

değişmez bir dize önünde görülen bu oldukça @ karakter C veya C++ tanımlayıcılar kullanılmaz C

24

, ne zaman hazır bilgi dizesi önünde:

da @ "" NSString değişmezleri vardır. NSString'in + stringWithUTF8String yöntemi için esas olarak kısadır.

@ da C dizeleri unicode desteğini ekler.manual itibaren

+11

*" It NSString'in + stringWithUTF8String yöntemi için temelde kısaydı. "* Tam olarak değil. Dizeler statik olarak tahsis edilir, bu da onları '+ [NSString stringWithUTF8String:] 'den (dinamik olarak ayrılır) farklı kılar ve bırakma ve tutma işlemlerinin üzerinde hiçbir etkisi yoktur. –

12

:

Objective-C çerçeveler tipik C tarzı dizeleri kullanmayın. Bunun yerine, dizeleri NSString nesneleri olarak geçirirler.

NSString sınıf beklediğiniz tüm avantajlarını sahiptir dizeleri bir nesne sarıcı sağlar

, yerleşik dahil bellek yönetimi keyfi uzunlukta dizeleri, Unicode desteği, printf tarzı biçimlendirme araçları depolamak için ve Daha. Bu tür dizgiler, yaygın olarak kullanılan olduğundan, Objective-C, için sabit değerlerden NSString nesneleri oluşturan bir kısa gösterim sağlar. Bu steno kullanmak için aşağıdaki örneklerde gösterildiği gibi, @ sembolüyle normal, çift tırnaklı dize önce yapmanız gereken tek şey: @ @interface ve önce kullanılır neden

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

Ancak bu, '@' nin kullanıldığı bir örnektir. Bu gibi bir koda bakıyorum: mapperOptions = @ {kSTMapperVolumeResolutionKey: @ (volumeResolution), '... NSString ile ilgisi yok – GreenAsJade

İlgili konular