2012-03-29 24 views
6

Trong một mẫu Xcode 4.3 Dự án gần đây, một số @synthesze được khai báo là:Độc thân và sự khác biệt dấu gạch dưới đôi trong tuyên bố @synthesize

@synthesize window = _window; 
@synthesize managedObjectContext = __managedObjectContext; 
@synthesize managedObjectModel = __managedObjectModel; 
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator; 
@synthesize navigationController = _navigationController; 

Một số đi kèm với một dấu gạch dưới đôi (__) ở đằng trước. Tại sao?

Mọi thứ cần làm với thuộc tính readonly?

@property (strong, nonatomic) UIWindow *window; 
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; 
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; 
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; 
@property (strong, nonatomic) UINavigationController *navigationController; 

Trả lời

3

Chúng có thể không được sử dụng dấu gạch dưới kép nếu chúng được sử dụng trong chương trình của riêng bạn. Tôi hy vọng nó chỉ là một giám sát trên một phần của bất cứ ai đã viết mẫu ví dụ đó. Trong thực tế, nó không chắc rằng họ sẽ gây ra bất kỳ vấn đề.

Chuẩn C dự trữ tất cả số nhận dạng bắt đầu bằng dấu gạch dưới kép để sử dụng riêng của việc triển khai. Vì Objective-C là một siêu của C, bạn không nên sử dụng các định danh đó trong các chương trình Objective-C. Từ spec C, phần 7.1.3 định danh Reserved:

Tất cả các định danh mà bắt đầu với một dấu gạch dưới và hoặc là một chữ cái viết hoa hoặc dấu gạch dưới khác luôn dành cho việc sử dụng.

1

Có thể trong trường hợp này. Nói chung, táo có xu hướng sử dụng _ tên tiền tố để tham chiếu đến bản sao bên ngoài của một biến (chẳng hạn như khi được truyền dưới dạng hàm hoặc tham chiếu trực tiếp trái với thuộc tính). Bất cứ ai đã viết mã đó có thể nghĩ rằng họ đã được thông minh bằng cách thêm một _ thêm cho chỉ đọc, nhưng điều này thường là xấu thực hành kể từ khi C dự trữ __ để xác định chỉ thị trình biên dịch.

Tôi chưa bao giờ thấy một trình biên dịch C phàn nàn về __ vars, và LLVM dường như không quan tâm, nhưng nó có lẽ không phải là thực hành tốt.

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