Gần đây tôi đã cố gắng biên dịch một dự án Xcode cũ hơn (được sử dụng để biên dịch tốt) và bây giờ tôi thấy rất nhiều lỗi của mẫu này:lỗi: thuộc tính nguyên tử có thể ghi được không thể ghép nối bộ setter/getter tổng hợp với người dùng đã xác định setter/getter
error: writable atomic property 'someProperty' cannot pair a synthesized setter/getter with a user defined setter/getter
các mẫu mã gây các lỗi này luôn trông như thế này:
// Interface:
@property (retain) NSObject * someProperty;
// Implementation:
@synthesize someProperty; // to provide the getter
- (void)setSomeProperty:(NSObject *)newValue
{
//..
}
tôi có thể thấy lý do tại sao các lỗi đã được tạo ra. Tôi nói với trình biên dịch để tổng hợp accessors tài sản của tôi (cả getter và setter), và sau đó ngay lập tức sau đó tôi ghi đè lên setter bằng tay. Mã đó luôn có mùi một chút.
Vì vậy, cách thích hợp để thực hiện việc này là gì? Nếu tôi sử dụng @dynamic
thay vì @synthesize
, tôi cũng sẽ phải viết trình khởi động. Có phải đó là cách duy nhất?
Điều này chỉ xảy ra với thuộc tính 'nguyên tử 'không? Trong trường hợp các thuộc tính nguyên tử, bạn nên giữ cặp getter/setter đồng bộ về chiến lược khóa. Điều này là khó khăn nếu một phần được tổng hợp trong khi một phần khác là mã tùy chỉnh. –
Nó chắc chắn sẽ biến mất nếu tôi làm cho tài sản nonatomic. Hấp dẫn. Tôi thậm chí không nghĩ về vấn đề đồng bộ hóa. –
Tôi đã truy cập chủ đề này để tìm giải pháp cho vấn đề chính xác đó. Tôi không thực sự muốn viết một getter và một setter của bản thân mình. Oh well… –