Tôi có cấu trúc lớp là loại UIViewControllerSubclass : UIViewController
, trong đó hàm duy nhất của UIViewControllerSubclass là #import UIViewController+Category.h
. Lý do tôi thêm các phương thức trong một danh mục là để tôi cũng có thể thực hiện UITableViewControllerSubclass : UITableViewController
, cũng sẽ là #import UIViewController+Category.h
. Như chúng ta đều biết, đừng lặp lại chính mình.Có an toàn để ghi đè lên một phương pháp được xác định trong Mục tiêu-C không?
Bây giờ giả sử rằng UIViewController + Category.h có cấu trúc:
@interface UIViewController(Category)
- (void) method1;
- (void) method2;
@end
Làm thế nào an toàn là nó để tạo UIViewControllerSubclassSubclass : UIViewControllerSubclass
, mà sẽ ghi đè method1
? Tôi cho rằng điều này sẽ hiệu quả vì thông điệp của Objective-C đã qua, nhưng vì lý do nào đó trực giác của tôi nói với tôi rằng tôi đang làm sai.
Bạn cần nhớ rằng Objective-C là "duck type". Nếu một lớp hỗ trợ một phương thức bạn có thể (an toàn) gọi nó, ngay cả khi phương thức này không được định nghĩa trong tệp .h của lớp. (Làm thế nào bạn lẻn qua kiểm tra trình biên dịch là tùy thuộc vào bạn.) –