Böyle inline gibi işlevleri ilan edebilir: DEBUG değilken optimize ve satır içi çünkü işleve hiçbir maliyet yokObjective-C'de statik sınıf yöntemlerini uygulayabilir miyim?
#ifdef DEBUG
void DPrintf(NSString *fmt,...);
#else
inline void DPrintf(NSString *fmt,...) {}
#endif
böylece. Ya aynı şeyi yapmak istersiniz ama bir sınıf yöntemi için?
Sınıfım böyle ilan edilir:
@interface MyClass : NSObject {
}
+ (void)DPrintf:(NSString *)format, ...;
// Other methods of this class
@end
ben yöntemi çağrılırken için hiçbir maliyeti yoktur, böylece inline
benzer bir şeye 'DPrintf
' dönüştürmek istiyorum.
Ama bunu yapamaz:
inline +(void)DPrintf:(NSString *)format, ...; {}
Nasıl bir sınıfın bir sıfır maliyetli statik yöntem olmayan ayıklama derlemeler için kapatılabilir olabilir?
Ayrıca, erken optimizasyona dikkat edin. Yazdırma işi olan bir işlevin satır içi işaretlemesi, işlev çok fazla çağrılsa bile, çok fazla zaman tasarrufu sağlamaz. Inlining çoğunlukla geri dönüşün hesaplanması çok kolay olduğu için anlamlıdır, bu yüzden fonksiyon çağrısı yükü önemlidir. Herhangi bir printf varyasyonu içeren hiçbir şey, aranan talimatların sayısı açısından kolay değildir. –
Günümüzde, çoğu modern derleyicilerin (GCC veya Clang olsun) genel olarak kendi başlarına iyi işleyen fonksiyonları nasıl tanıyacaklarını bilirler ve bunları kendileri gibi işaretlerler. İnsanlar hangi fonksiyonların iyi bir şekilde çalıştığını tahmin etmede kötü bir şekilde kötüdür, bu yüzden derleyicinin bunu anlaması için tek başına bırakmanız önerilir (bazı C derleyicilerinden duydum. dikkatli). –