Objective-C语言自定义获取器和设置器
示例
可以覆盖默认属性getter和setter:
@interface TestClass @property NSString *someString; @end @implementation TestClass //覆盖设置器以打印消息 - (void)setSomeString:(NSString *)newString { NSLog(@"Setting someString to %@", newString); //确保访问ivar(默认为带有_的属性名称 //一开始),因为callingself.someString会调用相同的 //方法再次导致无限递归 _someString = newString; } - (void)doSomething { //下一行将调用setSomeString:方法 self.someString= @"Test"; } @end
例如,这可以用于提供延迟初始化(通过重写getter来设置初始值(如果尚未设置)):
- (NSString *)someString { if (_someString == nil) { _someString = [self getInitialValueForSomeString]; } return _someString; }
您还可以创建一个属性来计算其在getter中的值:
@interface Circle : NSObject @property CGPoint origin; @property CGFloat radius; @property (readonly) CGFloat area; @end @implementation Circle - (CGFloat)area { return M_PI * pow(self.radius, 2); } @end