Bất cứ khi nào một cái gì đó là được coi là thực tiễn tốt/xấu, ít nhiều chủ quan. Khi làm điều gì đó vốn đã là đúng/sai, nó ít nhiều là khách quan.
isKindOfClass:
là một phương pháp hữu ích để kiểm tra thừa kế lớp. Nó trả lời câu hỏi duy nhất, "là đối tượng của một lớp mà là (một phân lớp của) một lớp nhất định?". Nó không trả lời bất kỳ câu hỏi nào khác như "đối tượng này có thực hiện phương thức đó theo cách riêng của nó không?" hoặc "Tôi có thể sử dụng đối tượng cho X hoặc Y không?". Nếu bạn sử dụng isKindOfClass:
như dự định, bạn sẽ không gặp bất kỳ sự cố nào. Sau khi tất cả, trong một ngôn ngữ gõ động bạn nên có các công cụ để trích xuất thông tin meta về các đối tượng. isKindOfClass:
chỉ là một trong những công cụ có sẵn.
Thực tế là một số đối tượng nhất định có thể nói dối về lớp học của họ không nên thực sự khiến bạn thất vọng. Họ chỉ ngụy trang mình là đối tượng của một lớp khác mà không phá vỡ bất cứ điều gì. Và nếu điều đó không phá vỡ bất cứ điều gì, tại sao tôi nên quan tâm?
Điều chính là bạn nên luôn nhớ sử dụng công cụ phù hợp cho bất kỳ mục đích cụ thể nào. Ví dụ: isKindOfClass:
không thay thế cho respondsToSelector:
hoặc conformsToProtocol:
.
Thực hiện các phương pháp trong các danh mục chỉ để tránh nhu cầu sử dụng các công cụ nội quan âm thanh tệ hơn với tôi. iE NSJSONSerialization 'JSONObjectWithData: options: error:' có thể trả về các kiểu khác nhau. (Mảng, từ điển).hacking phương pháp từ điển vào mảng và ngược lại âm thanh cực kỳ ngu ngốc với tôi. – vikingosegundo
Điều gì xảy ra nếu chỉ một lớp con cần có phương pháp? –
Nếu chỉ có một lớp con cần phải có một phương thức, sau đó có một phương thức trong lớp cơ sở với một thực hiện mặc định mà không làm gì cả, và một phương thức ghi đè trong lớp con thực hiện điều gì đó. –