Бесплатный онлайн-курс по основам программирования - Super Init
Ключевое слово "super" в языке программирования Objective-C используется для обращения к родительскому классу. Инициализация объекта в Objective-C осуществляется путем вызова конструктора класса (метода инициализации).
Когда мы вызываем super init, мы передаем управление конструктору родительского класса для выполнения его инициализации. Это особенно важно при наследовании классов, когда мы хотим наследовать свойства и методы родительского класса и добавить свою собственную логику.
Пример кода:
// Родительский класс
@interface ParentClass : NSObject
@property (nonatomic, strong) NSString *name;
-(instancetype)initWithName:(NSString *)name;
@end
@implementation ParentClass
-(instancetype)initWithName:(NSString *)name {
self = [super init];
if (self) {
self.name = name;
}
return self;
}
@end
// Подкласс
@interface ChildClass : ParentClass
@property (nonatomic, assign) NSInteger age;
-(instancetype)initWithName:(NSString *)name andAge:(NSInteger)age;
@end
@implementation ChildClass
-(instancetype)initWithName:(NSString *)name andAge:(NSInteger)age {
self = [super initWithName:name];
if (self) {
self.age = age;
}
return self;
}
@end
// Использование подкласса
ChildClass *child = [[ChildClass alloc]initWithName:@"Jack" andAge:10];
NSLog(@"%@ is %ld years old", child.name, (long)child.age);
В этом примере у нас есть родительский класс ParentClass и его подкласс ChildClass. В родительском классе есть свойство name, которое мы инициализируем с помощью метода initWithName. В подклассе мы добавляем свойство age и создаем соответствующий метод инициализации initWithName:andAge:.
Мы вызываем super initWithName: в методе инициализации подкласса ChildClass, чтобы передать управление методу инициализации родительского класса. Затем мы инициализируем свойство age и возвращаем созданный экземпляр объекта.
Когда мы используем подкласс ChildClass и передаем значения параметров в метод инициализации initWithName:andAge:, родительская инициализация также выполняется, и в итоге мы получаем созданный объект с обоими свойствами name и age.
Описание super init может быть расширено, но в основном это ключевое слово используется для вызова инициализации родительского класса. Использование super init является стандартным способом создания наследуемых объектов классов в Objective-C.