Базовый подсчет сообщений в Objective-c
-
14-11-2019 - |
Вопрос
В следующем примере сколько сообщений отправляется на myObject
?
- (void) myMethod:(id) myObject
NSLog(@"%@", myObject.myStringProperty);
NSLog(@"%@", myObject.myStringProperty);
NSLog(@"%@", myObject.myStringProperty);
}
Мне просто интересно, что Objective-c потенциально кэширует значение, возвращаемое myStringProperty
в стеке.Значение, возвращаемое myStringProperty
может меняться между последовательными сообщениями, поэтому, возможно, кэширование не имеет смысла.
Решение
Три
Мне просто интересно, что Objective-c потенциально кэширует значение, возвращаемое myStringProperty, в стеке.Значение, возвращаемое myStringProperty, может меняться между последовательными сообщениями, поэтому, возможно, кэширование не имеет смысла.
Нет, он не кэшируется.Каждое объектное сообщение отправляется, при условии, конечно, myObject
не является nil
.
Компилятор понятия не имеет о каких-либо побочных эффектах при выполнении метода (1) или о влиянии глобального состояния (2).
- напримеризменяется ли myObject или что-либо, на что он ссылается, во время выполнения получения
myStringProperty
? - напримервлияет ли на результат текущее время?
Другие советы
Вы можете установить точку останова - [MyObject MyStringProperty] и убедитесь для себя.Если MyStringProperty - это метод Getter, который вы реализуете себя, просто щелкните в левом канаве рядом с реализацией метода, чтобы установить точку останова.
Если это синтезированный метод доступа, введите его в качестве символической точки останова в Navigator точек обрыва XCode.Нажмите на значок стрелки вправо в разделе «Навигатор», чтобы выбрать навигатор точек останова, нажмите + в нижней части окна, и выберите «Добавить символическую точку останова ...».Тип - [Theclassname myStringProperty] в поле «Символ», затем нажмите «Готово».