Bạn có thể khai báo các chức năng như inlines như thế này:Tôi có thể nội tuyến các phương thức lớp tĩnh trong Objective-C không?
#ifdef DEBUG
void DPrintf(NSString *fmt,...);
#else
inline void DPrintf(NSString *fmt,...) {}
#endif
để khi bạn đang không ở trong DEBUG, không có chi phí cho chức năng vì nó tối ưu hóa và nội tuyến. Điều gì sẽ xảy ra nếu bạn muốn có cùng một thứ nhưng đối với một phương thức lớp học?
Lớp học của tôi được khai báo như thế này:
@interface MyClass : NSObject {
}
+ (void)DPrintf:(NSString *)format, ...;
// Other methods of this class
@end
Tôi muốn chuyển đổi 'DPrintf
' vào một cái gì đó tương tự như inline
để không có chi phí để gọi phương pháp này.
Nhưng tôi không thể làm điều này:
inline +(void)DPrintf:(NSString *)format, ...; {}
Làm thế nào tôi có thể có một phương pháp tĩnh zero-chi phí của một lớp tắt khi biên dịch không-debug?
Ngoài ra, hãy cẩn thận tối ưu hóa sớm. Một đánh dấu nội tuyến trên một chức năng đó là công cụ in ấn không có khả năng tiết kiệm nhiều thời gian, ngay cả khi chức năng được gọi là rất nhiều. Nội tuyến chủ yếu chỉ có ý nghĩa trong đó sự trở lại rất dễ tính toán, vì vậy chức năng gọi trên không là đáng kể. Không có gì liên quan đến bất kỳ biến thể của printf là dễ dàng về số lượng các hướng dẫn được gọi là. –
Bên cạnh thực tế là ngày nay, hầu hết các trình biên dịch hiện đại (cho dù GCC hay Clang) thường biết cách nhận biết các hàm hoạt động tốt trong nội bộ của chúng và sẽ đánh dấu chúng là chính chúng. Con người rất nổi tiếng khi ước lượng những hàm nào làm việc tốt, vì vậy bạn nên để nó một mình để trình biên dịch tìm ra (tôi đã nghe về một số trình biên dịch C thậm chí sẽ bỏ qua cho dù bạn đánh dấu các hàm như nội tuyến hay không) cảnh giác). –