DevPrep

Все темы › Основные понятия программирования

Переменная экземпляра, instance variable, ivar

Junior

Суть

Переменная экземпляра (ivar) — данные, которые хранит каждый объект отдельно: у двух экземпляров Person свои name и age, изменение одного не задевает другой. Термин «ivar» пришёл из Objective-C; в Swift то же самое называется stored property.

Objective-C: ivar и @property (legacy)

@interface Person : NSObject {
    NSString *_name;          // ivar, объявленный явно (старый стиль)
}
@property (nonatomic, copy) NSString *email;  // компилятор синтезирует _email
@end

Swift: stored и computed properties

final class Person {
    var name: String                      // stored property — «ivar» в Swift
    var email = ""                        // со значением по умолчанию
    lazy var greeting = "Hi, \(name)"     // создаётся при первом обращении
    var initials: String { String(name.prefix(1)) }   // computed — памяти нет
    var age = 0 {
        didSet { print("age: \(oldValue) -> \(age)") }
    }
    init(name: String) { self.name = name }
}

let a = Person(name: "Ann"), b = Person(name: "Bob")
b.age = 30                 // age: 0 -> 30; у a свой набор свойств
print(a.age, b.age)        // 0 30

Чем отличается от других переменных

На что смотрит интервьюер

В Objective-C-контексте: разницу между _ivar и self.property и почему в init пишут _name = name. В Swift: stored vs computed, lazy, observers и то, что struct с let-свойствами полностью неизменяем.

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store