Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Структура Xamarin.iOS и Xamarin.Mac требует использования API для отображения собственного типа строки .NET, string, для использования строк на C# и других языках программирования .NET, и для отображения строки в качестве типа данных, предоставляемого API, а не типа данныхNSString.
Это означает, что разработчикам не нужно хранить строки, предназначенные для вызова Xamarin.iOS и API Xamarin.Mac (унифицированный) в специальном типе (Foundation.NSString), они могут использовать System.String Mono для всех операций, и каждый раз, когда для API в Xamarin.iOS или Xamarin.Mac требуется строка, поскольку наша привязка API выполняет упаковку информации.
Например, свойство Objective-C "text" в UILabel типа NSString объявляется следующим образом:
@property(nonatomic, copy) NSString *text
Оно предоставляется в Xamarin.iOS как:
class UILabel {
public string Text { get; set; }
}
В фоновом режиме реализация этого свойства маршалирует строку C# в NSString и вызывает метод objc_msgSend так же, как это делал бы метод Objective-C.
Существует несколько сторонних API Objective-C, которые используют не NSString, а строку C ("char"). В таких случаях вы по-прежнему сможете использовать строковый тип данных C#, однако также понадобиться атрибут [PlainString], чтобы сообщить генератору привязки, что эта строка должна упаковываться не как NSString, а как строка C.
Исключения из правил
В Xamarin.iOS и Xamarin.Mac создано исключение из этого правила. Выбор между предоставлением string и предоставлением NSString в качестве исключения, нужно делать, если метод NSString может выполнить сравнение указателей вместо сравнения содержимого.
Это может произойти, когда API Objective-C используют общедоступную константу NSString в качестве маркера, представляющего некоторое действие, вместо сравнения фактического содержимого строки.
В этих случаях предоставляются NSString API, но таких API меньшинство. Также обратите внимание, что свойства NSString представлены в некоторых классах. Эти NSString свойства предоставляются для таких элементов, как уведомления. Эти свойства обычно выглядят следующим образом:
class Foo {
public NSString FooNotification { get; }
}
Уведомления — это ключи, которые используются для класса NSNotification, если необходимо выполнить регистрацию для конкретного события, транслируемого средой выполнения.
Ключи обычно выглядят примерно так:
class Foo {
public NSString FooBarKey { get; }
}
Другое место, где NSString представлены в API, — это маркеры, используемые в качестве параметров для некоторых API в iOS или OS X, принимающие объекты NSDictionary в качестве параметров. Словарь обычно содержит ключи NSString. Xamarin.iOS, по соглашению, именует статические свойства NSString, добавляя имя "Ключ".