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?
Trả lời
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 this
luô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ã.
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
@ 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. –
@ jv42: 'this' là một rvalue, nó không thể sửa đổi được. – GManNickG
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.
@Preet Sangha: Và có gì sai khi có một trò đùa trong câu trả lời? – JeremyP
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ả. –
- 1. Sự khác biệt giữa C++, mục tiêu-c và mục tiêu-C++ là gì?
- 2. Sự khác biệt giữa mục tiêu-c và java
- 3. Sự khác biệt giữa _ và tự. trong Mục tiêu-C
- 4. Mục tiêu-C: sự khác biệt giữa id và void *
- 5. Phát hành mục tiêu-C của người độc thân
- 6. Sự khác biệt của toán tử điều kiện giữa C và C++
- 7. Sự khác biệt giữa các lớp C# một phần và các mục tiêu C?
- 8. Bản dịch số lớn của C# thành Mục tiêu C
- 9. sự khác biệt giữa các tệp tiêu đề c (.h) và tệp tiêu đề C++ (.hpp)
- 10. Sự khác biệt giữa điều này và cơ sở
- 11. Bất kỳ sự khác biệt cơ bản nào giữa tệp nguồn và tiêu đề trong C?
- 12. Sự khác biệt giữa cấu trúc trong C và C++
- 13. Sự khác biệt giữa isEqualToString và toán tử == trong Mục tiêu C là gì?
- 14. Sự khác biệt giữa "+" và "-" trước tên hàm trong Mục tiêu-C
- 15. Sự khác biệt về biến động trong C# và C
- 16. C++ - Sự khác biệt giữa (*). và ->?
- 17. Phiên bản mục tiêu C của phát nổ()?
- 18. sự khác biệt giữa điều này và Activity.this
- 19. Sự khác biệt trong các phương pháp này của quá tải Nhà khai thác trong C++
- 20. Có sự khác biệt lớn nào giữa mục tiêu-c và Java hay iPhone và Android không?
- 21. tương lai của mục tiêu c?
- 22. Lý do cơ bản cho sự khác biệt giữa -> và. trong c/C++?
- 23. Sự khác biệt giữa các thuộc tính thuộc tính trong mục tiêu-c
- 24. khác biệt của hai DataTables trong C#
- 25. Tìm sự khác biệt giữa thân cây và nhánh?
- 26. Xóa một thư mục và các thư mục con của nó trong Mục tiêu-C/C
- 27. Mục tiêu-C và PhoneGap
- 28. Tại sao đầu ra của chương trình này khác nhau giữa C và C++?
- 29. Sự khác biệt về hiệu suất Mục tiêu-C, .m/.mm?
- 30. Serialization - sự khác biệt giữa C++ và Java
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
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) –
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