2011-02-12 67 views
7

Objective-C gibi direktifleri vardır Bunların arasında sofistike marco veya kod üreteçleri var. Kod oluşturma amaçlı özel yönergeler oluşturmak mümkün mü? Bir olası kullanım, CoreData için yöntemler üretmektir.Objective-C'de özel yönergeler oluşturmak mümkün mü?</p> <ul> <li>@interface</li> <li>@implementation</li> <li>@end</li> <li>@protocol bence</li> <li>@property</li> <li>@synthesize</li> </ul> <p>:

Düşünmüyorum, çünkü bu konuda hiçbir şey görmedim, ama dünyam dünya değil.


İzleyen Soru:

Jonathan Kendi önişlemci yazmak mümkündür ve bu nasıl soru yalvarır aşağıda belirtilen. Şu anda, SYMBOLIC_CONSTANT 102, SYMBOLIC_CONSTANT karakterlerinin tüm örneklerini, dosyalar derleyiciye geçmeden önce dosyadaki 102 karakteri ile değiştirecektir.

XCode'un bir "Çalıştır Komut Dosyası Aşamasını" bir Hedefler oluşturma işlemine ekleyebileceğini biliyorum. Bu yüzden '$ coredata' gibi özel preprocess direktiflerimi bulmak için bir komut dosyası yazabilirim ve daha sonra betiğin $ coredata karakterleri bazı kod karakterleriyle değiştirilen yeni bir dosya oluşturmasını sağlarım. Ancak XCode'un oluşturma sürecini anladığımdan, değiştirilmiş dosyaları Derleyici Kaynakları aşamasına aktaramazsınız. Dosyalar IDE tarafından belirlenir ve kilitlenir.

Benzer bir şey yapan oldu mu? Dış yapı sistemi ile mümkün olduğunu biliyorum ama dürüst olmak gerekirse ben bu seviyede bir anlayışa sahip değilim. Build and Run düğmesinin yaptıklarının teknik ayrıntılarını bilmiyorum. Bu arada

, ben Apple'ın XCode Belgeleri ... yanıtları

Teşekkür okumaya başlayacağız!

+0

Uzaktan kolay olacağını söylemedim. Ancak, "coredata" gibi bir şey geçerli bir C Preprocessor jetonudur ('$' sembol/makro adlarında kullanılabilir), bu yüzden '# define' ifadesinde kullanılabilir. Yine de, eğer bize hedefinizi söylerseniz, problem için daha kolay veya daha iyi bir yaklaşım önerebiliriz. –

cevap

3

Düşünceleriniz doğru: Bunu kodunuzda yapmak imkansız. Daha fazla @ -directives eklemenin tek yolu derleyicinin kendisi. Tüm bu sorunlara rağmen, sözdizimi vurgulama desteğinin bir yerde bir Xcode yapılandırma dosyasına kodlanmış olduğunu neredeyse garanti edebilirim.

Oh, ve eğer bir işlemci öncesi makroyu kullanmayı düşünürseniz, bu, işlemci öncesi makrolarda @ karakterinin yasa dışı olduğunu anlamamdır.

Düzenleme: Bir sınama yürüttüm ve haklıyım. C ön işlemcisi makrosunda @ karakterini kullanmak yasa dışıdır. Değişken isimlerle aynı kuralı takip ederler.

+2

Bir önişlemci makrosu kullanmadan bahsetmedim. Cevabımı tekrar oku. –

3

Objective-C sınırları dahilinde mi demek istiyorsunuz? Hayır, yeni anahtar kelimelerinizi tanımanın hiçbir yolu olmadığından. @whatever'u tespit etmek ve kodlamaya dönüştürmek için bir önişlemci yazabilirsiniz, ancak özellikle ne yapmak istediğinizi bize söylerseniz, daha verimli veya optimal bir yaklaşım önerebiliriz.

+1

@ karakteri, ön işlemcili makrolarda geçersiz. –

+0

Yanıt için teşekkürler. Bunu nasıl yapacağına dair bana bir fikir verdin. Kod oluşturmak için bir dil kancasına ihtiyacınız olmadığını unutmayın. – Tobias

+2

@Carter: Önişlemciyi yazmayı * söylemedim * inbuilt olanı kullan *. Kendi özel önişlemcisini gerektiren kod kullanmak istemiyorum. (Oh, bekle, her gün Objective-C kullanıyorum ...) –

0

Bu mümkün değildir. Bunlar, Objective-C diline yerleşik anahtar kelimelerdir. Sadece onların önünde bir @ olduğu için, onları diğer anahtar kelimelerden farklı yapmaz.

5

Kabul edilen yanıt doğru olsa da, libextobjc kütüphanesinin benimsediği bu tür bir soruna kısmi bir hacky çözümü vardır.

id foo = [[NSObject alloc] init]; 
id bar = [[NSObject alloc] init]; 

@weakify(foo, bar); 

kütüphaneye yazarı here bunu açıklıyor:

#define weakify(...) \ 
    try {} @finally {} \ 
    metamacro_foreach_cxt(ext_weakify_,, __weak, __VA_ARGS__) 

Böyle tanım aşağıdaki biçimde weakify anahtar kelimeyi kullanarak sağlar:

orada aşağıdaki gibi tanımları bulacaksınız, this code düşünün

Makrolar bir @ öncesi ile kullanılması amaçlandığından (@strongify (self); gibi), deneyin {} yapmamasına sebep olan sembol, sözdizimi hatalarına neden olur.


Güncelleme sonradan

From now on libextobjc "sembolünü kazıklanması" @autoreleasepool kullanır.

+0

* iç çekiş, korkunç hack-ory ile harika bir açıklama – TheCodingArt

İlgili konular