2013-08-29 26 views
8

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.

+1

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.) –

Trả lời

7

Mọi thứ sẽ hoạt động tốt vì danh mục được áp dụng cho UIViewController, vì vậy, tất cả các phiên bản UIViewController, bao gồm các lớp con, sẽ có quyền truy cập vào các phương thức. Không có gì không an toàn về nó; đó là cách các danh mục được dự định áp dụng.

+1

Tôi cho rằng nó chỉ "cảm thấy" không an toàn vì phương pháp danh mục không được kết hợp chặt chẽ với lớp như một phương pháp thể hiện. – paulrehkugler

Các vấn đề liên quan