2012-01-13 28 views
11

Đối với đóng gói tốt, phong nha Objective-C lập trình viên đưa private ivars của họ trong một tin extension khai báo trong file thi hành chính, như thế này:Thêm ivars trong @implementation

// MyClass.m 

@interface MyClass() { 
    float value; 
} 
@end 

@implementation MyClass 
@end 

Nhưng gần đây, tôi tìm thấy một cách đơn giản hơn để ẩn private ivars: ivars thể được khai báo trong một khối {} sau @implementation, như thế này:

// MyClass.m 

@implementation MyClass { 
    float value; 
} 
@end 

Nó thực sự tiện dụng khi không có phương pháp riêng nhưng chỉ private ivars cần phải được ẩn.

Tuy nhiên, tôi không chắc về hiệu lực cú pháp của nó. Bất cứ ai có thể xác nhận hoặc vô hiệu hóa nó với một số tài liệu tham khảo kinh điển?

Trả lời

11

Đó là hoàn toàn hợp lệ và đây là một tài liệu của Apple nói về nó:

Cá nhân tôi không sử dụng nó như tôi thích cú pháp của một loại lớp tiếp tục.

+0

Link bị hỏng. : P – cHao

+0

@cHao có apple cập nhật cấu trúc liên kết của họ tại một số điểm và đã phá vỡ rất nhiều liên kết cũ từ bài đăng SO. Gây phiền nhiễu để nói rằng ít nhất. – Brynjar

+0

Đây là liên kết được cập nhật: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html - tìm tiêu đề phụ "Bạn có thể xác định biến thể không có thuộc tính" cách nhỏ xuống trang. – jowie

3

Tôi cũng tò mò về điều này. Here is the updated link from Apple:

Bạn có thể Xác định biến Instance mà không tính

Đó là thực hành tốt nhất để sử dụng một tài sản trên một đối tượng bất kỳ lúc nào bạn cần phải theo dõi của một giá trị hoặc một đối tượng khác.

Nếu bạn cần phải xác định các biến dụ của riêng bạn mà không cần khai báo một thuộc tính, bạn có thể thêm chúng bên trong niềng răng ở phía trên cùng của giao diện lớp hoặc thực hiện, như thế này:

@interface SomeClass : NSObject { 
    NSString *_myNonPropertyInstanceVariable; 
} 
... 
@end 

@implementation SomeClass { 
    NSString *_anotherCustomInstanceVariable; 
} 
... 
@end 
Các vấn đề liên quan