2012-07-27 22 views
6

Tôi nhận thấy điều này khi sử dụng iOS6 beta 3Xcode giờ đây tạo ra một danh mục trống. Tại sao?

Khi tôi tạo lớp con mới của UIViewContoller (không có lớp cha nào khác tạo hành vi này mà tôi đã chú ý), tệp .m giờ đây có danh mục trống ở trên cùng của tệp. Trong quá khứ khi tìm hiểu về các loại, tôi nhận thấy rằng một số người sẽ sử dụng kỹ thuật tương tự này để chỉ ra các phương pháp riêng (mặc dù không thực sự riêng tư).

Đó có phải là ý định ở đây không? Đã có bất kỳ thay đổi nào để làm cho mọi thứ thực sự riêng tư chưa? Tôi cũng nhận thấy chỉ thị @private ở đó.

Phong cách mã hóa người của bạn liên quan đến các phương thức và phương thức riêng tư là gì?

CẬP NHẬT: Vì XCode đang đẩy chúng tôi sử dụng tiện ích mở rộng lớp học, tôi đã tiếp tục và sử dụng chúng cho các phương thức cá nhân/ivar cho dự án này. Tôi đã tìm thấy một nhược điểm mặc dù. Tôi thấy rằng tôi có thể tái sử dụng một trong những UIViewControllers subclassed của tôi cùng với tất cả các UIButtons, UILabels, vv .... Tôi đã thừa kế này: UIViewController < - FirstViewController < - SecondViewController.

Vâng, tất cả các phương pháp riêng mà tôi đặt trong phần mở rộng lớp của FirstViewController không bật lên trong tự động hoàn thành khi tôi mã trong SecondViewController. Một ít phiền toái nhẹ ....

+0

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

Trả lời

19

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.

+0

Câu trả lời hoàn hảo. Cảm ơn bạn! – VaporwareWolf

+0

@HCHogan nếu điều này trả lời câu hỏi của bạn, vui lòng đánh dấu câu hỏi đó là câu trả lời (đánh dấu vào bên trái bài đăng). Cảm ơn. – Stunner

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