이 같은 인라인 등의 기능을 선언 할 수 있습니다 : 당신이 DEBUG에 없을 때 그것은 최적화 및 인라인 있기 때문에, 기능에 아무런 비용이 없습니다Objective-C에서 정적 클래스 메서드를 인라인 할 수 있습니까?
#ifdef DEBUG
void DPrintf(NSString *fmt,...);
#else
inline void DPrintf(NSString *fmt,...) {}
#endif
있도록. 클래스 메쏘드와 같은 것을 원한다면 어떨까요?
내 클래스는 다음과 같이 선언한다 :
@interface MyClass : NSObject {
}
+ (void)DPrintf:(NSString *)format, ...;
// Other methods of this class
@end
내가 메소드를 호출에는 비용이 없다 있도록 inline
비슷한에 'DPrintf
을'변환 할.
그러나 나는이 작업을 수행 할 수 없습니다
inline +(void)DPrintf:(NSString *)format, ...; {}
을 어떻게 클래스의 제로 선정 된 정적 방법은 비 디버그 컴파일을 끌 수 있을까요?
또한 조기 최적화를 조심하십시오. 물건을 인쇄하는 함수의 인라인 표시는 함수가 많이 호출 되더라도 시간을 많이 절약하지는 못합니다. 인라인은 대부분 반환 값이 계산하기 쉬운 곳에서만 의미가 있습니다. 따라서 함수 호출 오버 헤드가 중요합니다. printf의 변형을 포함하는 어떤 것도 호출되는 명령의 수 측면에서 쉽지 않습니다. –
오늘날 현대 컴파일러 (GCC 또는 Clang)는 일반적으로 자체적으로 잘 작동하는 함수를 인식하는 방법을 알고 있으며, 자체적으로이를 표시합니다. 필자는 컴파일러가 인라인으로 함수를 표시할지 여부를 무시하는 C 컴파일러에 대해서도 들었습니다. 조심성 있는). –