28

Ai có thể cho tôi biết khi nào nên sử dụng các hạng mục và khi nào thì nên sử dụng phân lớp con trong Objective-C? Ngoài ra xin vui lòng cho tôi biết những lợi thế và bất lợi của họ.Khi nào cần sử dụng loại và thời điểm sử dụng phân lớp?

+1

thể trùng lặp của [Sự khác nhau giữa kế thừa và thể loại trong Objective-c] (http://stackoverflow.com/questions/522341/difference-between-inheritance-and-categories-in-objective-c) –

+0

Những gì bạn đã tìm hiểu về họ cho đến nay? Bạn đang cố gắng làm gì với họ? Điều gì khiến bạn tin rằng chúng có liên quan dưới bất kỳ hình thức nào? –

Trả lời

40

Danh mục mục tiêu-c rất hữu ích nếu bạn muốn thay đổi hành vi của TẤT CẢ các cá thể của lớp, với mã tối thiểu. Phân lớp là hữu ích hơn nếu bạn muốn thay đổi hành vi của chỉ một số trường hợp nhất định và giữ nguyên phương thức gốc cho những người khác.

Danh mục có thể nguy hiểm, đặc biệt nếu bạn không thể xem nguồn gốc của phương pháp gốc, vì vậy bạn thường nên sử dụng các lớp con trên khung công tác của bên thứ ba và riêng tư chứ không phải một danh mục.

+0

Cảm ơn bạn đã trả lời nhanh chóng ... –

+0

@coneybeare, Chúng tôi có thể nói rằng Danh mục không thay đổi các objets khi phân lớp thay đổi đối tượng? xin vui lòng nói – Sandy

+0

Tôi sẽ nói theo cách khác xung quanh. Một thể loại thay đổi các phương thức có sẵn trên một cá thể của một đối tượng, trong đó lớp con tạo ra một đối tượng mới của một kiểu khác. – coneybeare

8

Thêm vào những gì coneybeare đã nói. Subclassing là một lựa chọn tốt hơn cho việc tùy chỉnh, và Categories được sử dụng tốt hơn khi bạn chỉ muốn thêm một số chức năng cho các lớp hiện có.

13

Danh mục: Nó được sử dụng nếu chúng ta muốn thêm bất kỳ phương thức nào vào một lớp nhất định mà nguồn không được biết. Điều này về cơ bản được sử dụng khi chúng ta muốn thay đổi hành vi của bất kỳ lớp nào.

Ví dụ: Nếu chúng ta muốn thêm phương thức trên NSString để đảo ngược chuỗi, chúng tôi có thể tìm kiếm danh mục.

Phân lớp phụ: Nếu chúng ta muốn sửa đổi trạng thái cũng như hành vi của bất kỳ lớp nào hoặc ghi đè bất kỳ phương thức nào để thay đổi hành vi của lớp cha thì chúng ta sẽ đi phân lớp con.

Ví dụ: Chúng tôi phân lớp UIView để thay đổi trạng thái và hành vi trong mã iOS của chúng tôi.

3
  • Bạn có muốn thay đổi thứ gì đó xảy ra trong khuôn khổ của một đối tượng giao diện người dùng không? Sử dụng phân lớp. Override phương pháp tương ứng, chẳng hạn như init, drawRect, layoutSubviews, vv

  • Bạn có muốn một cái gì đó ứng dụng rộng rãi, một cái gì đó mà là ở
    Ngoài các chức năng hiện có, và bạn không quan tâm nếu điều này
    trở nên có sẵn cho tất cả các trường hợp của các trường hợp đã tồn tại từ trước của lớp khung công tác? Sử dụng danh mục. Ví dụ: Animate UILabel khi hành động của người dùng nhất định và áp dụng hoạt ảnh này thông qua ứng dụng của bạn cho tất cả các phiên bản UILabel.

+0

Cảm ơn câu trả lời. Tôi có một nghi ngờ; xin vui lòng sửa tôi nếu tôi sai - mặc dù thể loại và lớp con có thể được sử dụng thay thế cho nhau nhưng những gì bạn đã đề cập ở trên là phương pháp hay nhất. Trong khi đưa ra tuyên bố này, tôi đã nghĩ về các ca sử dụng - ghi đè hành vi hiện có, thêm các hàm mới, thêm các biến để duy trì trạng thái hoặc bất kỳ thuộc tính nào khác. –

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