Вопрос

В следующем примере сколько сообщений отправляется на 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).

  1. напримеризменяется ли myObject или что-либо, на что он ссылается, во время выполнения получения myStringProperty?
  2. напримервлияет ли на результат текущее время?

Другие советы

Вы можете установить точку останова - [MyObject MyStringProperty] и убедитесь для себя.Если MyStringProperty - это метод Getter, который вы реализуете себя, просто щелкните в левом канаве рядом с реализацией метода, чтобы установить точку останова.

Если это синтезированный метод доступа, введите его в качестве символической точки останова в Navigator точек обрыва XCode.Нажмите на значок стрелки вправо в разделе «Навигатор», чтобы выбрать навигатор точек останова, нажмите + в нижней части окна, и выберите «Добавить символическую точку останова ...».Тип - [Theclassname myStringProperty] в поле «Символ», затем нажмите «Готово».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top