2012-01-13 12 views
6

Makro MYMACRO tanımlıyorum. Not: değeri geçerli bir NSString değil. Çalışma zamanında herhangi bir dize birleştirme kullanmadan bir MACRO NSString'e nasıl genişletilir?

#define MYMACRO is 

makro

Ancak önişlemci makro genişletmek değil içinde bir NSString

@"This MYMACRO fun" 

ilanını kullanılır.

: Geçerli bir Objective-C sözdizimi olan aşağıdaki gibi makro genişletir

#define MYMACRO @"is" 
@"This "[email protected]" fun" 

: Önişlenmiş sonuç

@"This MYMACRO fun" 

ben genişletmek için makro almak için bugüne kadar bulunmuş en iyi çözümdür olduğunu

@"This "@"is"@" fun" 

Ancak, bu çalışma zamanında 2 birleştirme gerektirir.

Benim soru nasıl çalışma zamanında herhangi dize birleştirme kullanmadan bir makro insto NSString eklemek için mi?

İdeal olarak, ben çalışma zamanı zaten derleme zamanında birleştirerek ne var eminim ve çalışma zamanı değil @"This is fun" ziyade

cevap

6

@"This "@"is"@" fun" daha yürütmek istiyoruz.

+1

Haklısın. Bu şekilde birleştirme yapan kod için derleme oluşturursanız, bunun bir .asciiz dizesi olarak bittiğini görebilirsiniz. – UIAdam

+0

Ben de birleştirme zamanında oldu bile, birkaç dize işlemlerini kaydetmek için sadece bazı çirkin makro yazmak için geriye doğru eğilme değmez belirtti değer olduğunu düşünüyorum. Önce net kodu yazın ve ardından performans konusunda endişelenin. Şahsen ben bir NSString diğerinin içine eklemek için stringWithFormat kullanarak bakıyordum. – UIAdam

+0

@AdamW: Derleyicinin optimizasyonunu @ "Bu" @ "," @ "eğlenceli" derleme zamanında "Bu eğlenceli" olarak mı kastediyorsunuz? Sana katılıyorum , onun yerine bir kaç dize işlemlerini kaydetme basit kaynak kodunu almayı tercih. Ben erken optimizasyonu içine düşüyorum ve hepimiz bunun ne anlama geldiğini biliyorum: "Erken optimizasyon bütün kötülüklerin anasıdır - D. Knuth" –

-2
#define MYMACRO @"is" 
[NSString stringWithFormat:@"This %@ fun",MYMACRO] 
İlgili konular