__attribute__((deprecated))
là gcc way (cũng supported in clang) đánh dấu một chức năng/phương pháp không được chấp nhận. Khi một được đánh dấu là "không được chấp nhận", một cảnh báo sẽ được tạo ra bất cứ khi nào có ai gọi nó.
Cú pháp cho các chức năng bình thường sẽ là
__attribute__((deprecated))
void f(...) {
...
}
// gcc 4.5+/clang
__attribute__((deprecated("g has been deprecated please use g2 instead")))
void g(...) {
...
}
và rằng các phương pháp Objective-C sẽ
@interface MyClass : NSObject { ... }
-(void)f:(id)x __attribute__((deprecated));
...
@end
Bạn cũng có thể đánh dấu cả lớp như bị phản đối với
__attribute__((deprecated))
@interface DeprecatedClass : NSObject { ... }
...
@end
Apple cũng cung cấp tiêu đề <AvailabilityMacros.h>
cung cấp các macro DEPRECATED_ATTRIBUTE và DEPRECATED_MSG_ATTRIBUTE (msg) mở rộng đến các thuộc tính ở trên hoặc không có gì nếu trình biên dịch không hỗ trợ các thuộc tính. Lưu ý rằng tiêu đề này không tồn tại bên ngoài OS X/iOS.
Lưu ý bên cạnh, nếu bạn đang sử dụng Swift, bạn sử dụng @available
attribute để ngừng sử dụng một mục, ví dụ:
@available(*, deprecated=2.0, message="no longer needed")
func f() {
...
}
Cảm ơn bạn đã trả lời nhanh chóng này, tôi khá chắc chắn nó sẽ giúp đỡ, tôi đã tìm kiếm trong một thời gian trước khi hỏi :) – Julien
Tôi chỉ có một câu hỏi khác: là nó có thể để thêm một thông điệp như "Sử dụng phương pháp XXX thay thế"? – Julien
@Julien: Có: '__attribute ((không được chấp nhận (sử dụng phương thức XXX thay thế)))'. Nhưng cú pháp này chỉ có sẵn bắt đầu từ gcc 4.5, và phiên bản được vận chuyển với Xcode là 4.2 ... – kennytm