2012-04-29 50 views
14

Giả sử chúng tôi có một lớp học có tên Calculator. Có một phương thức lớp trong đó, được gọi là runProgram. Nếu tôi muốn gọi phương thức lớp học này, bên trong thực hiện của lớp, điều gì sẽ là sự khác biệt giữa hai là:Gọi phương thức lớp học qua tên lớp và tự

[Calculator runProgram] 

HOẶC

[self runProgram] 

Là những cả hai giống nhau không?

Trả lời

31

Nếu bên trong một phương pháp dụ:

[self runProgram] 

trong này, self có nghĩa là trường hợp đối tượng chính nó, và do đó nó sẽ tạo ra một lỗi runtime. Bạn muốn sử dụng

[[self class] runProgram] 

để thay thế.

Tuy nhiên, nếu bạn gọi phương pháp này từ một phương pháp lớp học, sau đó

[self runProgram] 

là đúng, kể từ bây giờ self đề cập đến lớp riêng của mình. Tôi muốn khuyến khích sử dụng

[Calculator runProgram] 

vì sau đó lớp con của lớp sẽ sai lầm gọi cha (Calculator 's) phương pháp thay vì một phương pháp có thể ghi đè.

+1

Với báo trước rằng '[Calculator runProgram]' là đúng cho các lớp rõ ràng không có gì để làm với 'Máy tính', ala sử dụng các phương pháp nhà máy khác nhau? – Tommy

+0

+1: Tất nhiên, vì không có phương pháp nào khác cho họ! Nhưng OP đã hỏi về việc gọi phương thức này trong chính lớp triển khai. –

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