tôi muốn bảo vệ quyền truy cập vào NSMutableArray trong giao diện công cộngBảo vệ từ việc thêm đối tượng để NSMutableArray trong giao diện công cộng
tôi đang cố gắng để làm điều này bằng cách định nghĩa tài sản như NSArray trong giao diện nào và như NSMutableArray trong giao diện riêng như thế này:
@interface Order : NSObject
@property (readonly, strong, nonatomic) NSArray* comments;
@end
@interface Order()
@property (readwrite, strong, nonatomic) NSMutableArray* comments;
@end
Nhưng điều này không làm việc - vì vậy tôi phải xác định tài sản trong giao diện công cộng NSMutableArray thay vì:
@interface Order
@property (strong, nonatomic) NSMutableArray* comments;
@end
mục đích là để cung cấp quyền truy cập chỉ đọc vào nhận xét cho các ứng dụng API và toàn quyền truy cập vào các phương thức như addObject:
trong quá trình triển khai.
mục tiêu Vì vậy, Xác định rõ ràng hơn nhiều:
- Khách hàng nên có quyền truy cập đến tài sản như NSArray mà không có khả năng truy cập vào các phương pháp đột biến.
- Khách hàng không được có khả năng cập nhật nhận xét để trỏ đến giá trị mới.
- Giải pháp phải được thực hiện mà không cần tạo thêm cấu trúc và sao chép mảng.
Vì vậy, chỉ đơn giản là câu hỏi là nếu có thể đưa ra định nghĩa công khai về tài sản tổng quát hơn (NSArray thay vì NSMutableArray).
Có cách nào khác sạch sẽ để đạt được mục tiêu hoặc tôi phải sử dụng NSMutableArray ở khắp mọi nơi?
GIẢI
Sau khi xem xét câu hỏi và câu trả lời tôi nhận ra rằng tôi muốn sử dụng lớp chung chung hơn NSArray trong giao diện công cộng và NSMutableArray trong việc thực hiện ban đầu của tôi - nhưng nó chỉ là không thể cho một tài sản. Vì vậy, câu trả lời là không thể.
Vì vậy, tôi sẽ chỉ sử dụng một thuộc tính duy nhất với NSMutableArray mà không cần thêm bất kỳ sự bảo vệ mong muốn nào.
Nhưng tôi cũng sẽ chọn câu trả lời phù hợp nhất mà nó có thể hữu ích nếu bạn thực sự thích bảo vệ hơn sự đơn giản và hiệu quả.
Chọn câu trả lời này là phù hợp nhất cho câu hỏi ban đầu. Nhưng tôi sẽ không sử dụng "bản sao" và sẽ không tạo thêm getter - sẽ giữ mã một chút không được bảo vệ, nhưng sạch sẽ * đơn giản với một tài sản. Cảm ơn câu trả lời! – Vladimir
Vladimir, xin chào, tôi chính xác trong tình huống tương tự như bạn. Tại sao bạn không đi với giải pháp này? Nó âm thanh thực sự là một giải pháp tuyệt vời cho vấn đề của chúng tôi; vấn đề với sao chép nông của mảng là gì? – kernix