Một lớp học có thể kéo dài trong Objective C sử dụng một thể loại như:Mục tiêu-C Tên danh mục có làm gì không?
@interface NSString (CategoryName)
-(NSString *)myFabulousAddition; // a fabulous additional method
@end
/////////////////////////////
@implementation NSString (CategoryName)
-(NSString *)myFabulousAddition {
// do something fabulous...
}
@end
Trong ví dụ nhỏ này, tôi sẽ có thêm phương pháp myFabulousAddition
để NSString. Sau đó tôi có thể gọi nó bằng [anNSString myFabulousAddition]
giống như thể nó là một phần của bộ phương pháp NSString. Tuyệt vời và hữu ích.
Trong Apple documents regarding Categories, trạng thái tài liệu:
Không có giới hạn cho số loại mà bạn có thể thêm vào một lớp , nhưng mỗi tên loại phải khác nhau, và mỗi nên kê khai, xác định một nhóm phương pháp khác.
gì nếu bạn có một cái gì đó như thế này:
@interface NSString (CategoryName)
-(NSString *)myFabulousAddition; // a fabulous additional method
@end
@interface NSString (ANOTHERCategoryName)
-(NSString *)myFabulousAddition; // a DIFFERENT fabulous additional method
// BUT with same name as the other category
@end
/////////////////////////////
@implementation NSString (CategoryName)
-(NSString *)myFabulousAddition {
// do something fabulous...
}
@end
@implementation NSString (ANOTHERCategoryName)
-(NSString *)myFabulousAddition {
// do something equally fabulous, but DIFFERENT...
}
@end
Việc thiếu một tên trong ngoặc chỉ ra rằng hình thức là một mở rộng của lớp, như vậy:
@interface MyObject() // No name -- an extension vs category to MyObject
- (void)setNumber:(NSNumber *)newNumber;
@end
Tên danh mục có bất kỳ ý nghĩa nào đối với trình biên dịch hoặc trình liên kết không? Phần tên danh mục của chữ ký phương thức có được hay không là một phần của không gian tên nguyên thủy? Nếu tên danh mục là vô nghĩa, làm thế nào để bạn biết nếu bạn sắp sửa dẫm lên một phương pháp khác và nhận được hành vi không xác định?
Dường như sự bảo vệ duy nhất của tôi là 'SomeUniquePrefixForMyCompanyOrMeThatIsUglyFabulousMethod' chỉ thêm vào hội chứng căng thẳng lặp đi lặp lại trên ngón tay nghèo của tôi ... Cảm ơn! –
Và thực sự thêm tiền tố vào các phương pháp bạn đang thêm với một danh mục cũng được đề xuất bởi Apple ... – Moszi
@ carrot-top sẽ đúng nếu Xcode không cung cấp mã hoàn thành. –