![](/img/trans.png)
[英]Objective-C property that is readonly publicly, but has a private setter
[英]why readonly property setter is working objective c
@interface ViewController : UIViewController{
NSNumber *nmbr;
}
@property (nonatomic, readonly) NSNumber *nmbr;
- (NSNumber*)nmbr;
- (void)setNmbr:(NSNumber *)value;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self setNmbr:[NSNumber numberWithInt:4]];
NSLog(@"Value of number is: %@", self.nmbr);
}
- (NSNumber*)nmbr{
return nmbr;
}
- (void)setNmbr:(NSNumber *)value{
nmbr = value;
}
@end
我期望程序不要讓setNmbr函數起作用,因為接口文件中的nmbr屬性是只讀的。 但這是在設置nmbr的值。 我在做什么錯?
readonly
不會阻止您編寫自己的設置器。 它只是阻止編譯器為您合成設置器。 如果您為readonly
屬性實現了setter,但它會警告您,那會很好,但事實並非如此。
顯然,不建議為readonly
屬性實現setter。 此外,您通常甚至都不會聲明該ivar,也不會實現該屬性的getter,因為它們都將為您合成(除非您在那里進行了特殊的操作,否則就不會)。
如果要在Objective-C中創建屬性,它將為您創建3件事。
_nmbr
[self nmbr];
這實際上將調用- (NSNumber *)nmbr {}
方法。 [self setNmbr:@1];
這實際上將調用- (void)setNmbr:(NSNumber *)nmbr {}
方法。 就是說,您不需要顯式定義getter和setter。 默認情況下,Objective-C為您提供這些吸氣劑和吸氣劑。
您可以訪問上述問題中的設置器,因為您明確設置了不需要的設置器。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.