Đó không phải là tên "riêng tư" làm cho riêng tư; các phương thức là riêng tư bởi vì chúng nằm trong một thể loại được khai báo bên trong tệp triển khai.
Có ba công dụng của một loại, mỗi trong số đó thêm các phương pháp để một lớp học (lưu ý: phương pháp duy nhất, không Ivars)
Mở rộng một lớp Cocoa hiện
này cho phép bạn thêm của riêng bạn các phương thức cho một lớp hiện có. Ví dụ: Ví dụ: nếu bạn muốn mở rộng NSString để áp dụng cách viết hoa đặc biệt, bạn có thể tạo một lớp mới có tên là NSString + Capitals. trong NSString + Capitals.h bạn sẽ phải:
@interface NSString (Capitals)
-(NSString *)alternateCaps:(NSString *)aString;
@end
và trong NSString + Capitals.m bạn sẽ thực hiện các phương pháp
@implementation NSString (Capitals)
-(NSString *)alternateCaps:(NSString *)aString
{
// Implementation
}
phương pháp cá nhân trên một lớp
Đây là tương tự như trên, ngoại trừ các phương thức bổ sung được khai báo và xác định trong tệp triển khai (.m) Thông thường một cách có phương thức riêng - vì chúng không nằm trong tệp .h (là tệp #imported bởi các lớp khác) họ đơn giản là không có thể nhìn thấy. Trong trường hợp này, việc thực hiện các phương thức được thực hiện trong khối thực hiện riêng của chúng. ví dụ
// someClass.m
@interface someClass (extension)
-(void)extend;
@end
@implementation someClass
// all the methods declared in the .h file and any superclass
// overrides in this block
@end
@implementation someClass (extension)
-(void)extend {
// implement private method here;
}
Lớp mở rộng (mới cho 10.5 Leopard)
Một cách đơn giản của việc có phương pháp riêng. Trong trường hợp đặc biệt này, tên danh mục trống và các phương thức riêng được triển khai trong cùng một khối với tất cả các phương thức lớp khác.
// someClass.m
@interface someClass()
-(void)extend;
@end
@implementation someClass
// all the methods declared in the .h file and any superclass
// overrides in this block
// Implement private methods in this block as well.
-(void)extend {
// implement private method here;
}
@end
Đây là tài liệu của Apple trên Danh mục và tiện ích mở rộng.
Tôi không đồng ý rằng bạn nên trộn các phương thức riêng tư (danh mục) với việc triển khai thường xuyên của bạn. Đó là vấn đề về phong cách, nhưng tôi muốn duy trì sự tách biệt rõ ràng. –
Cần lưu ý rằng việc tiếp tục lớp (những gì bạn gọi là một phần mở rộng lớp) là mới trong Leopard. –
@Peter. Cảm ơn bạn đã chỉ ra điều đó. @Marc. Trong trường hợp danh mục trống, các phương thức phải được triển khai trong khối chính. Tuy nhiên, khi sử dụng phương pháp thứ hai, tôi đồng ý rằng đó là phong cách tốt hơn để đặt triển khai danh mục trong khối của riêng họ. – Abizern