Tôi rất bối rối giữa bản thân và gạch dưới để truy cập thuộc tính trong Objective c, bất cứ khi nào chúng ta tạo thuộc tính, bộ getter-setter của nó sẽ tự động được tạo ra. Vì vậy, chúng ta có thể truy cập cùng một thuộc tính với self.property và giống như _property. Theo ý kiến của tôi, có shoulb có một số khác biệt mà tôi không nhận được. Xin vui lòng cho tôi biết với các ví dụ.Sự khác biệt giữa bản thân và gạch dưới để truy cập tài sản trong mục tiêu c?
Trả lời
Phiên bản dưới (dưới gạch) là biến mẫu thực tế và không được tham chiếu trực tiếp. Bạn nên luôn luôn đi qua tên tài sản, mà sẽ đảm bảo rằng bất kỳ hành động getter/setter được vinh danh.
Vì vậy, nếu bạn thực hiện _property = 4
, bạn đã trực tiếp đặt biến. Nếu bạn thực hiện self.property = 4
, bạn có thể thực hiện phương thức một cách hiệu quả gọi là [self setProperty:4]
, sẽ được thực hiện thông qua setter (có thể làm điều gì đó chẳng hạn như thực thi thuộc tính có giá trị tối đa là 3 hoặc cập nhật giao diện người dùng để phản ánh giá trị mới).
khi bạn đang sử dụng self.XX, bạn truy cập thuộc tính thông qua setter hoặc getter.
khi bạn đang sử dụng _XX, bạn truy cập thuộc tính trực tiếp bỏ qua setter hoặc getter.
Hãy nói rằng bạn có một tài sản được xác định như sau:
@property (nonatomic,strong) NSString* name;
Các getter và setter tài sản tên sẽ tự động được tạo ra cho you.Now, sự khác biệt giữa việc sử dụng gạch chân và tự là:
self.name [email protected]"someName"; // this uses a setter method generated for you.
_name = @"someName"; // this accesses the name property directly.
Điều tương tự cũng áp dụng cho việc sở hữu tên;
- 1. Sự khác biệt giữa _ và tự. trong Mục tiêu-C
- 2. 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?
- 3. Sự khác biệt giữa mục tiêu-c và java
- 4. Mục tiêu-C: sự khác biệt giữa id và void *
- 5. Sự khác biệt giữa C++, mục tiêu-c và mục tiêu-C++ là gì?
- 6. Độc thân và sự khác biệt dấu gạch dưới đôi trong tuyên bố @synthesize
- 7. Khi nào cần truy cập tài sản với bản thân và khi nào thì không?
- 8. Laravel 4 sự khác biệt giữa các URL :: tài sản() và tài sản()
- 9. Sự khác biệt giữa isEqualToString và toán tử == trong Mục tiêu C là gì?
- 10. Tìm sự khác biệt giữa thân cây và nhánh?
- 11. Sự khác nhau giữa dấu gạch dưới gạch dưới() và đơn giản '=' là gì?
- 12. Sự khác biệt giữa các lớp C# một phần và các mục tiêu C?
- 13. Sự khác biệt giữa mục tiêu và mục tiêu hiện tại trong flex 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 giữa cấu trúc trong C và C++
- 16. Sự khác biệt giữa "**/* /" và "** /"?
- 17. Bất kỳ sự khác biệt cơ bản nào giữa tệp nguồn và tiêu đề trong C?
- 18. Sự khác nhau giữa tài sản và Field trong C# 3.0+
- 19. Socket.io, sự khác biệt giữa socket.set() và ổ cắm tài sản?
- 20. Sự khác nhau giữa mục tiêu và feval trong xgboost
- 21. Truy cập thuộc tính mục tiêu-C
- 22. Sự khác biệt giữa CẬP NHẬT VÀ CẬP NHẬT
- 23. C++ - Sự khác biệt giữa (*). và ->?
- 24. sự khác biệt giữa 'yếu' và 'assign' trong đại biểu kê khai tài sản
- 25. Sự khác biệt giữa Tài sản Class và Chức năng Prototype trong Javascript
- 26. Sự khác biệt giữa 'nội dung' và 'văn bản'
- 27. sự khác biệt giữa các tệp tiêu đề c (.h) và tệp tiêu đề C++ (.hpp)
- 28. Javascript DOMParser truy cập innerHTML và các tài sản khác
- 29. Lý do cơ bản cho sự khác biệt giữa -> và. trong c/C++?
- 30. Sự khác nhau giữa tài sản và phương pháp
dùng getter tài sản/setters cũng có lợi ích rất lớn của các nhà quan sát kích hoạt key-value (KVO). – Cyrille
Cyrille - cảm ơn. Có thể có những lợi thế khác nữa mà tôi không biết, nhưng tôi khá thiếu kinh nghiệm với Obj-C. –
Đó là câu trả lời chính xác từ một người “thiếu kinh nghiệm với Obj-C”. Chúc mừng. – Cyrille