2012-02-27 31 views
12

Tôi đang cố gắng thêm thuộc tính mà không tạo biến mẫu. có khả năng làm cái này không? Hay bạn có thể làm điều gì đó tương tự theo cách không phải là tài sản?Thêm thuộc tính không có biến mẫu?

Ví dụ:

@interface RandomClass() 
@property (nonatomic) int value; 
@end 

@implementation RandomClass 
@synthesize value = _value; 
// Here I override the default methods @synthesize 
-(int)value 
{ 
     return 8; // Actually I'm returning something more complex, so a "define" won't work 
} 
-(void)setValue:(int)value 
{ 
    self.someOtherValue = value; 
} 

Trong đoạn mã trên, tôi không sử dụng các trường hợp biến _value! Có cách nào để làm điều này mà không tạo biến?

Trả lời

8

Tháo dòng

@synthesize value = _value; 

Kể từ khi bạn đang thực hiện các getter/setter chính mình, các @synthesize là không hữu ích.


@synthesize phục vụ hai công việc. Công việc đầu tiên là kết nối các tài sản với một ivar sao lưu, tổng hợp các ivar nếu nó không tồn tại. Công việc thứ hai là tổng hợp getter/setter. Nếu bạn không cần sự ủng hộ của ngà voi, và nếu bạn đang cung cấp các bản triển khai cho bộ thu thập dữ liệu/setter, thì bạn không cần @synthesize chút nào.

+0

Nếu bạn định khai báo thuộc tính, bất kể nó được hỗ trợ bởi một thanh công khai hay không, bạn phải khai báo '@ synthesize' hoặc' @ dynamic' cho nó. OP có thể có khai báo '@ dynamic'. Và trong trường hợp đó, và đưa ra những lời bình luận của anh ta trong đoạn mã, anh ta có lẽ cũng không cần đến ngà được khai báo. – kamprath

+0

Đó là những gì tôi đang tìm kiếm! Tuyệt vời cảm ơn bạn! – tomidelucca

+5

@claireware: Ngược lại, nếu trình biên dịch có thể thấy rằng các phương thức được triển khai, không cần '@ dynamic'. Xem ["Chỉ thị thực hiện thuộc tính"] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW9): Bạn có thể sử dụng các lệnh '@ synthesize' và' @ dynamic' trong các khối '@ implementation' để kích hoạt các hành động trình biên dịch cụ thể. Lưu ý rằng không bắt buộc đối với bất kỳ khai báo '@ property' đã cho nào.

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