Одним из дурацких решений является создание абстрактного суперкласса, который дает вам обычный синтез свойств.
Затем создайте конкретный подкласс, который вы фактически будете использовать, который просто реализует и переопределяет метод (та же сигнатура) и вызывает super, чтобы выполнить фактическую настройку.
Это позволяет вам делать все, что вы хотите сделать до или после вызова реализации super.
Пример:
@interface ALTOClassA : NSObject
@property NSString *catName;
@end
В этом тесте больше ничего не нужно .m кроме файла-заглушки для этого теста.
Создайте подкласс, специально для интерфейса @ ничего не нужно
#import "ALTOClassA.h"
@interface ALTOClassAJunior : ALTOClassA
@end
В @implementation мы делаем переопределение.
#import "ALTOClassAJunior.h"
@implementation ALTOClassAJunior
- (void)setCatName:(NSString*)aCatName {
NSLog(@"%@",NSStringFromSelector(_cmd));
[super setCatName:aCatName];
NSLog(@"after super: self.catName %@", self.catName);
}
@end
Используется:
ALTOClassAJunior *aCAJ = [ALTOClassAJunior new];
NSLog(@"aCAS.catName %@", aCAJ.catName);
NSLog(@"set it to George.");
[aCAJ setCatName:@"George"];
NSLog(@"aCAS.catName %@", aCAJ.catName);
Это позволяет вам использовать автоматически сгенерированный код, и при этом делать то, что вы хотите делать со своим классом. Абстрактный Суперкласс часто является полезным решением для многих вещей.