2012-12-24 14 views
6

Trong OS táo X 10,8 Lõi Thư viện Tài liệu dưới Lập trình với Objective-C, nó khẳng định,Trường hợp không sử dụng Properties trong Objective-C

"Đó là thực hành tốt nhất để sử dụng một tài sản trên một đối tượng bất cứ lúc nào bạn cần phải theo dõi giá trị hoặc đối tượng khác. Nếu bạn cần xác định biến mẫu của riêng bạn mà không khai báo thuộc tính, bạn có thể thêm chúng vào dấu ngoặc ở đầu giao diện lớp hoặc triển khai ... "

Vì vậy, Tôi tò mò, sau đó, những gì sẽ là những trường hợp mà bạn cần phải xác định các biến dụ mà không khai báo các thuộc tính? Ngoài những gì táo nói, nó có thể thực sự chỉ là một sở thích cá nhân?

Cảm ơn!

Trả lời

2

Một số chắc chắn là vấn đề ưu tiên, nhưng không phải tất cả mọi thứ: bạn tốt hơn với tài sản cho các mục có khả năng hiển thị bên ngoài và các mục cần điều khiển truy cập khác nhau bên trong so với bên ngoài lớp học của bạn. Vấn đề đã được phát âm ít hơn nhiều kể từ khi giới thiệu ARC, bởi vì trước khi bạn có thể muốn sử dụng các thuộc tính cho các cuộc gọi tự động giữ lại và giải phóng. Tầm quan trọng của khía cạnh này của thuộc tính đã được giảm đáng kể cho các tình huống khi bạn cần tự động sao chép các đối tượng vào thuộc tính của bạn.

0

Tôi thích các thuộc tính vì tôi có thể xác định bộ định vị/getters và bởi vì tôi thích cú pháp đó nhiều hơn.
Nhiều người khẳng định đó là một thực tế xấu để sử dụng ivars, như trong bài viết này:
http://cocoasamurai.blogspot.it/2012/08/cover-up-those-ivars.html
Đáng tiếc là ngày nay các lập trình viên gọi thực hành xấu tất cả những gì họ không thích, thậm chí không có lý do khách quan.
Nếu bạn khai báo một ivar, bạn vẫn có thể sử dụng chỉ thị @private, do đó, không phải là vấn đề phơi bày hay không biến. Tôi nghĩ rằng nếu bạn thích nhiều ngà hơn, bạn nên sử dụng chúng.

1

Nếu bạn đang sử dụng ARC và thời gian chạy gần đây (đủ gần đây để cho phép bạn khai báo ivars của bạn trong khối @implementation), thì các biến mẫu đột nhiên trở nên tuyệt vời. Tại sao? Bởi vì không giống như @properties chúng đặc trưng theo lớp. Không có nguy cơ họ sẽ vô tình bị ghi đè bởi một lớp con.

Chúng cũng nhanh hơn trong trường hợp đơn giản, vì bạn không gọi bất kỳ phương thức nào để nhận hoặc đặt chúng.

Cá nhân tôi cũng thấy nó sạch hơn nhiều. Không có phần mở rộng lớp nào xác định các @properties riêng tư và tất cả những thứ rác đó. Chỉ cần ivars, đẹp và đơn giản.

Vì vậy, lời khuyên tốt nhất, IMHO, là sử dụng chúng theo mặc định. Chỉ sử dụng @properties nếu bạn thực sự cần chức năng của chúng, ví dụ:

  • Bạn cần một cách để truy cập chúng từ bên ngoài lớp học của bạn.
  • Bạn muốn cho phép các lớp con ghi đè chúng.
  • Bộ thu thập hoặc thiết lập của bạn không chỉ là một nhiệm vụ tầm thường.

Hai thứ hai thực sự hiếm hơn bạn nghĩ. Nói chung là không khôn ngoan để cố gắng ghi đè các thuộc tính trong các lớp con, chỉ vì nó hơi khác thường và có một số cạnh thô.

Nếu bạn tìm thấy, sau đó, bạn cần phải nâng cấp một ngà voi lên một @property, nó là tốt đẹp và dễ dàng - nơi duy nhất nó có thể được truy cập trong @implementation của bạn, do đó, nó thường là một tìm kiếm đơn giản- và- thay thế để thêm "tự". để tham chiếu (và có thể xóa dấu gạch dưới hàng đầu, nếu bạn đặt tên cho chúng theo cách đó). cho đến khi bạn không cần phải trả chi phí và chạy các rủi ro khi sử dụng @properties.