iPhone — амперсанд, какой амперсанд?

#iphone #ios

#iPhone #iOS

Вопрос:

Я вижу эту строку в одном из образцов Apple…

 if (amp;ADBannerContentSizeIdentifierPortrait != nil)
  

что именно этот амперсанд делает это?

Спасибо

Комментарии:

1. что это за объект ADBannerContentSizeIdentifierPortrait ?

2. хороший вопрос. Это переменная из iAd Framework.

Ответ №1:

Амперсанд в C и языках, которые «являются производными» от него (например, C и Objective-C), возвращает адрес переменной (вместо содержимого).

В этом случае происходит следующее: переменная ADBannerContentSizeIdentifierPortrait является слабо связанной переменной. Это означает, что во время выполнения он может отсутствовать (это имеет место в более старых версиях ОС). Теперь, если переменная действительно существует, амперсанд возвращает адрес. Если в ОС еще нет этой переменной, возвращается амперсанд nil .

Итак, вкратце: выражение проверяет, предоставляет ли ОС уже переменную ADBannerContentSizeIdentifierPortrait . Согласно документации, эта переменная существует с iOS 4.2, поэтому тело if выражения выполняется только на iOS> = 4.2.

Комментарии:

1. После публикации я начал подозревать, что причиной может быть что-то подобное, но ваш ответ ответил больше, чем я себе представлял. Спасибо.

Ответ №2:

Амперсанд отображает ссылку на данные. ADBannerContentSizeIdentifierPortrait — это простое перечисляемое значение, и поэтому само по себе не может быть нулевым, но его ссылка может быть. Пожалуйста, добавьте больше кода, если вам нужен более подробный ответ.

Комментарии:

1. ADBannerContentSizeIdentifierPortrait это не «перечисляемое значение», это константа NSString .

2. Исправьте, моя ошибка — хотя основная идея все еще актуальна.