Objective-C matrizes primitivas
-
20-09-2019 - |
Pergunta
Eu quero ter uma matriz mutável com primitivas no OBJ-C (seletores). Qual é a maneira recomendada de fazer isso? NSArray
e esses podem apenas segurar objetos.
Solução
Você deve usar um NSValue
Para embrulhar o seletor ou qualquer outro tipo primitivo que você precise. No cacau sel é algum tipo de ponteiro, então você pode usar [NSValue valueWithPointer:whatever]
para construí -lo e [value pointerValue]
Para divulgá -lo. Ou, em geral, você pode usar [NSValue valueWithBytes:&whatever objCType:@encode(SEL)]
; Isso funciona para qualquer tipo.
Outras dicas
Se você quiser armazenar uma variedade de SEL
objetos, a coisa mais fácil seria converter o SEL
s para NSString
s usando o NSStringFromSelector()
função, armazene -os em um NSMutableArray
, e depois convertê -los de volta para SEL
s Quando você os puxa usando NSSelectorFromString()
função.
Além de gerenciar uma matriz de estilo C (que definitivamente não é a melhor opção, IMO), sua única opção é usar NSArray
/NSMutableArray
, e armazenar os números usando NSNumber
. É um pouco mais irritante divulgar o valor do que com o tipo numérico real, mas ele libera você de gerenciar a memória da matriz.
Como os tipos primitivos geralmente são apenas números (sejam eles inteiros ou pontos flutuantes) ou ponteiros, qual é o problema de usar as classes usadas para embrulhá-las para seus propósitos? Um NSMutableArray
do NSNumbers
, por exemplo?