[英]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.