2015-06-17 15 views
5

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

12

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).

+2

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

+0

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. –

+0

Đó 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

3

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.

1

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;

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