Я только что написал фрагмент кода для отображения таблицы UIActionSheet в своем приложении. Пока я смотрел на код для инициализации моего UIActionSheet, что-то показалось мне немного странным. Функция инициализации имеет следующую подпись ...Передача указателя NSArray, а не указателя на конкретный тип
initWithTitle:(NSString *)title delegate:(id UIActionSheetDelegate)delegate cancelButtonTitle:(NSString *)cancelButtonTitle destructiveButtonTitle:(NSString *)destructiveButtonTitle otherButtonTitles:(NSString *)otherButtonTitles
Как вы можете увидеть параметр otherButtonTitles является указателем на строку. В моем коде я установил его следующим образом:
otherButtonTitles: @"Title", @"Date", nil
Хотя это прекрасно компилируется, я действительно не понимаю, как это работает. Мое чтение утверждения состоит в том, что я создал встроенный массив, содержащий два элемента (Title и Date). Почему это происходит тогда? Я передаю NSArray * вместо NSString *. Из небольшого понимания C++ я знаю, что массив действительно является указателем на первый элемент. Итак, это встроенный массив, который я создаю массив C, а не NSArray?
Я надеюсь, что я смогу передать статический NSArray *, используемый в другом месте моего класса, в параметр otherButtonTitles. Но передача объекта NSArray * напрямую не работает.
Спасибо! К сожалению, похоже, что завершение кода XCode не указывало аргумент var args - вот где я его скопировал. Я уже сталкивался с концепцией Java, поэтому все это имеет смысл! – mmccomb