Bạn đang đề cập đến định nghĩa giao diện này:
@interface MYViewController()
@end
Đây là kỹ thuật một phần mở rộng lớp chứ không phải là một danh mục. Các danh mục có một chuỗi bên trong dấu ngoặc đơn. Lớp mở rộng được thêm vào lớp tại thời gian biên dịch, và do đó có thể thêm ivars (thường là ở dạng tài sản). Các danh mục được thêm vào khi chạy và không thể thêm ngà.
Tất cả những gì đã nói, điểm của bạn là chính xác. Điều này được sử dụng để xác định các phương thức và thuộc tính riêng.
Trong thế giới ObjC, "riêng tư" là một dấu hiệu "không xâm phạm", không phải là tường bằng dao cạo. Mặc dù có một từ khóa @private
(bổ sung thêm việc thực thi trình biên dịch), nhưng nó chỉ áp dụng cho các thanh ngang và nói chung là không cần thiết. Kiểu bảo mật dựa trên cảnh báo này hoạt động rất tốt trong ObjC và khá đầy đủ.
Đặt thuộc tính riêng của bạn trong tiện ích mở rộng lớp này và người gọi bên ngoài sẽ nhận được cảnh báo "có thể không phản hồi với bộ chọn" nếu họ cố gắng truy cập chúng (giống như họ sẽ gọi cho bất kỳ phương thức chưa xác định nào). Bạn không bao giờ nên cho phép các cảnh báo tồn tại trong một dự án ObjC, vì vậy điều này thực thi việc đóng gói dữ liệu.
EDIT
Nếu họ tin, sau đó họ không nên bật lên trong lớp con của bạn. Những gì bạn muốn được bảo vệ. Không có kế hoạch tuyệt vời cho các phương pháp được bảo vệ trong ObjC, nhưng một kỹ thuật phổ biến là đưa chúng vào một thể loại trong một tệp .h như MYViewController + Protected.h. Tôi thấy điều này xuất hiện rất ít khi thực hành, vì rất nhiều thiết kế ObjC tốt không phân lớp. Nó sử dụng thành phần và đoàn đại biểu thay thế.
Về "Tại sao chỉ xem bộ điều khiển". Đầu tiên, nó không chỉ xem bộ điều khiển. Nó chỉ xem bộ điều khiển trên iOS (tốt, VC, TableViewController và GLKViewController). Trên máy Mac, nó cũng là bộ điều khiển cửa sổ và các nhà nhập khẩu tiêu điểm.Tìm kiếm:
.../Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates
.../Library/Xcode/Templates
Nhưng tại sao lại như vậy? Vâng, đó là tất cả các bộ điều khiển, và nó cực kỳ phổ biến cho các bộ điều khiển cần các thuộc tính riêng. Trong thực tế, nếu bạn không có thuộc tính riêng trong bộ điều khiển, có thể bạn đang làm quá nhiều công khai. Đó không phải là phổ quát của mô hình và các lớp học xem. Tôi nghi ngờ rằng đã chơi vào quyết định của họ. Nó cũng có thể là những người khác nhau, những người sở hữu các mẫu, hoặc chúng được cập nhật vào những thời điểm khác nhau. Đôi khi bạn thấy ít mâu thuẫn mượt mà theo thời gian.
Bạn cũng có thể tạo các mẫu của riêng mình. Xem Creating Custom Xcode 4 File Templates.
Phản hồi của Rob là tốt nhưng ... Có ai có bất kỳ ý tưởng tại sao XCode chỉ tạo ra điều này cho các lớp con của UIViewController và không phải tất cả các lớp? (Nó có thể làm điều đó cho một số người khác, nhưng các lớp thông thường mà tôi mở rộng không hiển thị hành vi này.) – VaporwareWolf