2012-06-24 30 views
15

Tôi đã kiểm tra ra tất cả những câu hỏi này ...Mục đích của phương pháp thẩm vs Phương Class trong Objective-C

... và tất cả những gì họ giải thích là cách các phương thức thể hiện được sử dụng trên các cá thể của một lớp và các phương thức lớp được sử dụng với lớp, khi một thông báo được gửi đến một lớp. Điều này là hữu ích, nhưng tôi tò mò muốn biết lý do tại sao một phương pháp này sẽ sử dụng một phương thức lớp so với một phương thức thể hiện.

+0

bản sao có thể có của [Objective-C: Class vs Instance Methods?] (Http://stackoverflow.com/questions/1053592/objective-c-class-vs-instance-methods) –

Trả lời

45

Nói chung, bạn nên tạo các phương thức thể hiện khi bạn cần mã hoạt động trên một cá thể cụ thể của đối tượng. Bạn tạo một phương thức lớp khi bạn cần làm một cái gì đó liên quan đến lớp đó nói chung nhưng có lẽ không hoạt động trên bất kỳ đối tượng cụ thể nào của lớp đó.

Trong thực tế, bạn sẽ thấy rằng gần như tất cả các phương pháp của bạn phải là phương pháp thể hiện. Chỉ cần nhìn vào bất kỳ lớp Objective-C hiện tại nào như NSString, NSArray, UIView, v.v. và bạn sẽ thấy rằng đại đa số các phương pháp của chúng là các phương pháp thể hiện. Cách sử dụng phổ biến nhất của các phương thức lớp (một lần nữa, hãy xem các lớp tôi đã đề cập) là để các hàm tạo thuận tiện trả về các đối tượng autorelease hoặc các trình truy cập đơn lẻ.

Xem xét phương pháp length trong NSString. Tại sao đây là một phương thức thể hiện chứ không phải là một phương thức lớp? Nó là một phương thức thể hiện bởi vì nó chỉ có ý nghĩa khi yêu cầu một cá thể cụ thể của NSString chiều dài của nó là bao nhiêu. Yêu cầu NSString nói chung cho một chiều dài (tức là nếu chiều dài là một phương pháp lớp) sẽ không có ý nghĩa gì cả.

Mặt khác, giả sử rằng chúng tôi muốn thêm phương thức vào NSNumber sẽ trả lại giá trị số nguyên tối đa có thể được lưu trữ trên một hệ thống nhất định. Trong trường hợp này, nó phải là phương thức lớp học vì chúng tôi chỉ hỏi một câu hỏi chung là NSNumber độc lập với bất kỳ trường hợp cụ thể nào.

+0

Bạn đang nhầm lẫn giữa các tham số phương thức và đối tượng đang được sử dụng để gọi phương thức (còn gọi là người nhận). Tôi muốn đề nghị xem xét một số hướng dẫn trực quan-mục tiêu C trực tuyến hoặc trong một cuốn sách. – UIAdam

+0

Giải thích tốt. Nhưng tôi tự hỏi liệu nó có còn quan trọng không khi tôi viết bài này, ARC đã có hình. – sooon

+0

Giải thích rất hay ... cảm ơn :) – Nav

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