2012-02-05 32 views
6

tôi có câu hỏi về việc sử dụng biến số và biến mẫu. Hãy xem một ví dụ.iOS khi sử dụng biến mẫu hoặc phương thức getter

Giả sử tôi có trong một file .h:

@property (nonatomic,strong) NSString *name 

và trong file .m tôi tổng hợp mà biến theo cách này:

@synthesize name = _name; 

Bây giờ câu hỏi của tôi là: sự khác biệt giữa những gì sử dụng:

[self.name aMethod] 

[_name aMethod] 

Cảm ơn!

Trả lời

8

Người đầu tiên truy cập ivar thông qua phương thức getter. Thứ hai trực tiếp truy cập ivar. Vì nó là một thuộc tính tổng hợp đơn giản, không có nhiều khác biệt ngoại trừ việc đầu tiên thực hiện một cuộc gọi phương thức bổ sung. Tuy nhiên, nếu tài sản là nguyên tử, hoặc động, hoặc phương thức getter phức tạp, thì sẽ có sự khác biệt ở chỗ cái đầu tiên thực sự là nguyên tử trong khi thứ hai sẽ không và cái đầu tiên sẽ kích hoạt bất kỳ logic phức tạp nào trong getter trong khi thứ hai sẽ không.

Trong thuật ngữ đơn giản, trình biên dịch lại viết các cuộc gọi đầu tiên:

[[self name] aMethod] 

trong khi cuộc gọi thứ hai chỉ đơn giản là để lại như nó vốn có.

1
[self.name aMethod] 

tương đương với

[[self name] aMethod] 

Vì vậy, một getter được gọi và tin nhắn được gửi đến kết quả của nó.

Trong trường hợp của bạn, kết quả hiển thị sẽ giống nhau.

Tuy nhiên, có thể không phải là trường hợp nếu getter không tầm thường (tức là tổng hợp).

0

Các cuộc gọi đầu tiên thông qua bộ chia - nó bằng [[self name] aMethod]. Thứ hai chỉ sử dụng truy cập trực tiếp.

Bạn thường nên ưu tiên sử dụng các trình truy cập, nhưng có những lúc bạn nên đi chệch khỏi điều đó. sự xuất hiện phổ biến nhất là trong khi ở trạng thái được xây dựng một phần, chẳng hạn như trình khởi tạo của bạn và dealloc. lý do là bạn nên cẩn thận xây dựng hoặc phá hủy trạng thái của bạn, và không quan tâm đến ngữ nghĩa giao diện của đối tượng của bạn - tức là, bằng cách sử dụng accessors có thể có tác dụng phụ hành vi và ngữ nghĩa tiêu cực.

Danh sách đầy đủ hơn các lý do có thể được tìm thấy tại đây: Why would you use an ivar?

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