2010-09-28 24 views
8

ai đó có thể cho biết sự khác biệt giữa bản thân mục tiêu C và C++ con trỏ này?Sự khác biệt b/w Mục tiêu C của bản thân và C++ của điều này?

+0

Tài liệu tham khảo Mục tiêu-C và C++ của bạn cho bạn biết điều gì? – GManNickG

+0

bản sao có thể có của [Gán cho bản thân trong Mục tiêu-C] (http://stackoverflow.com/questions/1341734/assigning-to-self-in-objective-c) –

+3

Kirill V. Lyadvinsky: Nó không trùng lặp với điều đó câu hỏi. Người hỏi đã hiểu câu trả lời cho câu hỏi này. – JeremyP

Trả lời

21

Sự khác biệt chính là this là từ khóa, trong khi self là một biến. Kết quả của điều này là trong khi thisluôn luôn đề cập đến đối tượng đang thực hiện một phương pháp cụ thể, các phương pháp Mục tiêu-C được tự do sửa đổi self trong khi thực thi. Điều này đôi khi được các nhà xây dựng sử dụng, đặt self = nil về lỗi.

Những lý do để làm như vậy là:

  • để lớp con (mà chuỗi initialisers với self = [super init]) có thể thấy khi khởi động bị lỗi và không biết để mang về trong initialisers riêng của họ.
  • đối tượng soạn thảo có thể thấy lỗi và biết rằng chúng không có thành phần hợp lệ.

Một số người khởi tạo sẽ đặt self thành đối tượng khác, nhưng hợp lệ. Điều này có thể được sử dụng trong các nhóm lớp, trong đó lớp "trừu tượng" có thể tạo ra một cá thể tạm thời trong khi xây dựng đối tượng khởi tạo, nhưng cuối cùng trả về một đối tượng khác dựa trên các thuộc tính được xây dựng trong khi xây dựng. Ngoài ra, điều đó có nghĩa là bạn có thể làm những điều bình thường với tên biến gây nhầm lẫn cho mọi người mà bạn không thể làm với từ khóa, chẳng hạn như xác định biến địa phương hơn có cùng tên self trong một khối mã.

+0

Trong C++, bạn * có thể * sửa đổi giá trị này. Không nói rằng bạn nên, nhưng tôi đã nhìn thấy nó được sử dụng để đóng gói một số thông tin thêm vào một hệ thống mà con trỏ 32 bit không được sử dụng đầy đủ bởi ánh xạ bộ nhớ ... – jv42

+0

@ jv42: trình biên dịch của tôi không cho phép điều đó mà không cần thiết lập tùy chọn, vì vậy tôi cho rằng đó là không chuẩn hoặc lỗi thời. –

+1

@ jv42: 'this' là một rvalue, nó không thể sửa đổi được. – GManNickG

5

Có. Một là đánh vần s-e-l-f. Loại còn lại được viết là t-h-i-s.

Ít hài hước:

self được sử dụng trong các lớp học Objective-C để đại diện cho một con trỏ trường hợp hiện nay.

this được sử dụng trong các lớp C++ để thể hiện con trỏ là cá thể hiện tại.

Chúng thực hiện các vai trò tương tự nhưng trên các cấu trúc hoàn toàn khác nhau.

+0

@Preet Sangha: Và có gì sai khi có một trò đùa trong câu trả lời? – JeremyP

+0

Lol. Tôi đã viết đùa vì tôi quá lười biếng để tìm cách đánh vần một cách khéo léo khi tôi đã xóa nó. Và để trả lời câu hỏi của bạn không có gì cả. –

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