Trước ARC, nếu tôi muốn có một tài sản để được readonly để sử dụng nó nhưng có nó có thể ghi trong lớp, tôi có thể làm:Objective-C ARC thuộc tính readonly và thực hiện setter tin
// Public declaration
@interface SomeClass : NSObject
@property (nonatomic, retain, readonly) NSString *myProperty;
@end
// private interface declaration
@interface SomeClass()
- (void)setMyProperty:(NSString *)newValue;
@end
@implementation SomeClass
- (void)setMyProperty:(NSString *)newValue
{
if (myProperty != newValue) {
[myProperty release];
myProperty = [newValue retain];
}
}
- (void)doSomethingPrivate
{
[self setMyProperty:@"some value that only this class can set"];
}
@end
Với ARC, nếu tôi muốn ghi đè lên setMyProperty, bạn không thể sử dụng từ khóa giữ lại/phát hành nữa, điều này có đầy đủ và chính xác không?
// interface declaration:
@property (nonatomic, strong, readonly) NSString *myProperty;
// Setter override
- (void)setMyProperty:(NSString *)newValue
{
if (myProperty != newValue) {
myProperty = newValue;
}
}
Cảm ơn Joshua - rất hữu ích! Tôi đã, kể từ đó, khó hiểu một điều cuối cùng. Đọc về các thay đổi ARC đối với các thuộc tính [ở đây] (http://tools.ietf.org/html/draft-pantos-http-live-streaming-08) dường như, theo mặc định, chúng được thực hiện bởi @synthesize với ** mạnh ** thay vì ** gán **. Trong trường hợp đó, vì lợi ích của việc làm sạch API công khai, không tốt nhất là chỉ định (nonatomic, readonly) vì không cần người dùng giao diện công khai quan tâm hoặc cần biết rằng, nội bộ, tài sản mạnh ? Hy vọng tôi có ý nghĩa ở đây. :) –
Nó chỉ mạnh đối với các loại đối tượng, để giúp làm cho mọi thứ rõ ràng hơn, tôi vẫn muốn đặt 'strong',' weak' hoặc 'assign'. –
Thực sự mạnh mẽ chỉ áp dụng cho các loại đối tượng nhưng câu hỏi vẫn còn là liệu API công khai của bạn (tức là tệp tiêu đề) có cần phải xuất bản chi tiết này hay không. Đó là điểm thực tôi đang truy vấn! –