Share via


NSString em Xamarin.iOS e Xamarin.Mac

O design do Xamarin.iOS e do Xamarin.Mac exige que a API use para expor o tipo de cadeia de caracteres .NET nativo, , stringpara manipulação de cadeia de caracteres em C# e outras linguagens de programação .NET e para expor a cadeia de caracteres como o tipo de dados exposto pela API em vez do tipo de NSString dados.

Isso significa que os desenvolvedores não devem ter que manter cadeias de caracteres que se destinam a ser usadas para chamar Xamarin.iOS & Xamarin.Mac API (Unified) em um tipo especial (Foundation.NSString), eles podem continuar usando System.String Mono para todas as operações, e sempre que uma API no Xamarin.iOS ou Xamarin.Mac requer uma cadeia de caracteres, nossa associação de API se encarrega de empacotar as informações.

Por exemplo, a Objective-C propriedade "text" em um UILabel do tipo NSString, é declarada assim:

@property(nonatomic, copy) NSString *text

Isso é exposto no Xamarin.iOS como:

class UILabel {
    public string Text { get; set; }
}

Nos bastidores, a implementação dessa propriedade marshals a cadeia de caracteres C# em um NSString e chama o objc_msgSend método da mesma maneira que Objective-C faria.

Há um punhado de APIs de terceiros Objective-C que não consomem um , mas consomem uma cadeia de caracteres C (um NSString"char"). Nesses casos, você ainda pode usar o tipo de dados de cadeia de caracteres C#, mas deve usar o atributo [PlainString] para informar ao gerador de vinculação que essa cadeia de caracteres não deve ser empacotada como um NSString, mas sim como uma cadeia de caracteres C.

Exceções à regra

Tanto no Xamarin.iOS quanto no Xamarin.Mac, abrimos uma exceção a essa regra. A decisão entre quando expomos s e quando fazemos uma exceção e expomos stringNSStrings é tomada se o NSString método puder estar fazendo uma comparação de ponteiro em vez de uma comparação de conteúdo.

Isso pode acontecer quando uma API usa uma Objective-C constante pública NSString como um token que representa alguma ação, em vez de comparar o conteúdo real da cadeia de caracteres.

Nesses casos, as APIs são expostas, NSString e há uma minoria de APIs que têm isso. Você também notará que as propriedades NSString são expostas em algumas classes. Essas NSString propriedades são expostas para itens como notificações. Essas são propriedades que geralmente se parecem com isto:

class Foo {
     public NSString FooNotification { get; }
}

As notificações são chaves usadas para a NSNotification classe quando você deseja se registrar para um evento específico que está sendo transmitido pelo tempo de execução.

As teclas geralmente se parecem com isto:

class Foo {
     public NSString FooBarKey { get; }
}

Outro lugar onde NSStrings são expostos na API é como tokens que são usados como parâmetros para determinadas APIs no iOS ou OS X que tomam NSDictionary objetos como parâmetros. O dicionário normalmente contém NSString chaves. O Xamarin.iOS, por convenção, nomeia essas propriedades estáticas NSString adicionando o nome "Key".