2011-08-09 45 views
9

Có người nói với tôi rằng tôi có thể tạo tài sản riêng tư để chỉ có một cá thể của lớp học mới có thể tham khảo (thông qua bản thân.)Làm cách nào để tạo các thuộc tính riêng tư?

Tuy nhiên, nếu tôi sử dụng @private trong giao diện lớp học và sau đó khai báo tài sản bình thường, vẫn có thể truy cập từ bên ngoài lớp học ... Vậy làm thế nào tôi có thể làm cho tài sản riêng tư? Ví dụ về cú pháp.

Trả lời

20

Bạn cần bao gồm các thuộc tính này trong tiện ích mở rộng lớp học. Điều này cho phép bạn xác định các thuộc tính (và các iVars gần đây) trong tệp triển khai của bạn trong một khai báo giao diện. Nó tương tự như định nghĩa một thể loại nhưng không có tên giữa các dấu ngoặc đơn.

Vì vậy, nếu đây là tập tin MyClass.m của bạn:

// Class Extension Definition in the implementation file 
@interface MyClass() 

@property (nonatomic, retain) NSString *myString; 

@end 

@implementation MyClass 

- (id)init 
{ 
    self = [super init]; 
    if(self) 
    { 
     // This property can only be accessed within the class 
     self.myString = @"Hello!"; 
    } 
} 

@end 
+4

Lưu ý rằng tiện ích mở rộng lớp có thể nằm trong tệp tiêu đề mà bạn #import chỉ trong các lớp cần truy cập, do đó có hiệu quả cho phép thuộc tính "thư viện riêng tư". – bbum

5

Khai báo tài sản trong việc thực hiện (.m) tập tin, như vậy:

@interface MyClass() 

@property (nonatomic, retain) MyPrivateClass *secretProperty; 

@end 

Bạn sẽ có thể sử dụng thuộc tính đó trong lớp của bạn mà không có cảnh báo trình biên dịch.

+0

Lợi thế của việc tạo tài sản ở đó.Chúng tôi có thể trực tiếp sử dụng ivar.Is có bất kỳ? – Imran

+1

Những ưu điểm là tính thống nhất (thuộc tính công khai và riêng tư được truy cập theo cùng một cách), rõ ràng (tính chất giống như thuộc tính) và tính linh hoạt (tất cả quyền truy cập thuộc tính đi qua cùng phương thức, vì vậy tải lười, tính toán, vv đều là tầm thường) . – kubi

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