2012-02-01 35 views
10

Tôi đã nhìn vào một số mã:Khi nào và tại sao bạn sử dụng @interface ClassName (Riêng tư)? - Objective-C

@interface ClassName (Private) 

- (float)methodOne:(NSDictionary *)argOne; 
- (void)methodTwo:(NSDictionary *)argTwo; 

@end 

@implementation ClassName 
.... 

Đoạn mã trên là ở phía trên cùng của tập tin ClassName.m mà dường như xác định phương pháp giao diện bổ sung cho các lớp như tư nhân?

Tại sao thực hiện việc này? điểm là gì? Điều gì khác có thể đi đến đâu (Riêng tư)? Bất cứ ai có tài liệu về điều này?

Cảm ơn

Trả lời

16

Đây là cách giữ các phương thức mà lớp học sử dụng nội bộ không bị tiếp xúc với người khác. Đó là một phần của đóng gói. Trong Objective-C 2.0 (iOS và Mac OS X 10,5 +), nó phổ biến hơn để sử dụng một phần mở rộng lớp ở phía trên cùng của tập tin thực hiện:

@interface ClassName() 

- (void)privateMethod; 

@end 

Một phần mở rộng lớp thực sự chỉ là một trường hợp đặc biệt của một loại (đó là những gì bạn đã hỏi về). Sự khác biệt chính là đối với một thể loại, trình biên dịch sẽ không phàn nàn ngay cả khi @implementation của bạn không bao gồm các định nghĩa cho các phương thức được khai báo trong thể loại. Đối với các phương thức trong một lớp mở rộng, lớp của bạn phải thực hiện các phương thức đó trong khối @implementation chính của nó hoặc bạn sẽ nhận được một cảnh báo trình biên dịch.

Bạn nên sử dụng tiện ích mở rộng lớp trong mã iOS hoặc mã Mac nhắm mục tiêu ít nhất là Mac OS X 10.5 Leopard.

+0

Về cơ bản, '@ interface ClassName (Private)' được khấu hao hình thức '@ interface ClassName()'. Chính xác ? – WebOrCode

+1

@WebOrCode, bạn có thể nói rằng, mặc dù nó không được chính thức ngừng sử dụng, nhưng sau đó chỉ đơn giản là một quy ước và sử dụng tính năng ObjC được áp dụng rộng rãi hơn (danh mục). Sử dụng '(Riêng tư)' có nghĩa là bạn đang khai báo một danh mục * được đặt tên *, không được dùng nữa. Chỉ sử dụng chúng như một cách để khai báo các thuộc tính "private" đã được thay thế bởi các phần mở rộng của lớp. –

2

Về cơ bản, đây là danh mục và cho phép thêm phương thức vào tệp .m. Những ngày này cách tốt nhất là sử dụng một phần mở rộng lớp, cú pháp tương tự chỉ là "tư nhân" là mất tích, chỉ cần hai dấu ngoặc đơn.

Ưu điểm bổ sung của phần mở rộng lớp là các thuộc tính cũng có thể được bao gồm và trình biên dịch sẽ xác nhận rằng tất cả các phương thức được khai báo được xác định.

Một khu vực thực sự tiện dụng là khả năng khai báo đúng chỉ đọc trong tệp .h và đọc ghi trong tệp .m. Bằng cách đó, người dùng của lớp chỉ có quyền truy cập đọc nhưng bản thân lớp đó có toàn quyền truy cập.

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