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