Talvez isso seja óbvio, mas não sei como declarar propriedades de classe no Objective-C.
Preciso armazenar em cache um dicionário por classe e me perguntar como colocá-lo na classe.
objective-c
cocoa
oop
mamcx
fonte
fonte
.
sintaxe -accessor não está vinculada a propriedades no Objective-C, é apenas um atalho compilado para qualquer método que retorna algo sem aceitar argumentos. Nesse caso, eu preferiria - eu pessoalmente prefiro a.
sintaxe para qualquer uso em que o código do cliente pretenda obter algo, não execute uma ação (mesmo que o código de implementação possa criar algo uma vez ou executar ações de efeito colateral) . A.
sintaxe de uso intenso também resulta em código mais legível: a presença de[…]
s significa que algo significativo está sendo feito quando as buscas usam a.
sintaxe.Estou usando esta solução:
E eu achei extremamente útil como uma substituição do padrão Singleton.
Para usá-lo, basta acessar seus dados com notação de ponto:
fonte
self
significa dentro de um método de classe?self
é o objeto que recebeu a mensagem . E uma vez que as aulas são também objetos , neste casoself
meiosModel
@synchronized
?Como visto na WWDC 2016 / XCode 8 (o que há de novo na sessão do LLVM às 05:00 ). Propriedades da classe podem ser declaradas da seguinte maneira
Observe que as propriedades da classe nunca são sintetizadas
fonte
static
variável ( ) ainda deve ser declarada e usada, e os métodos implementados explicitamente, exatamente como eram anteriormente. A sintaxe de pontos também já funcionou anteriormente. Ao todo, isso parece um negócio maior do que realmente é.Se você está procurando o equivalente a nível de classe
@property
, a resposta é "não existe". Mas lembre-se,@property
é apenas açúcar sintático, de qualquer maneira; apenas cria métodos de objeto com nome apropriado.Você deseja criar métodos de classe que acessem variáveis estáticas que, como outros já disseram, têm apenas uma sintaxe ligeiramente diferente.
fonte
UIDevice.currentDevice.identifierForVendor
funciona para mim.Aqui está uma maneira segura de fazer isso:
Essas edições garantem que fooDict seja criado apenas uma vez.
Na documentação da Apple : "dispatch_once - executa um objeto de bloco uma vez e apenas uma vez durante a vida útil de um aplicativo".
fonte
Initializer element is not a compile-time constant
.A partir do Xcode 8, o Objective-C agora suporta propriedades de classe:
Como as propriedades da classe nunca são sintetizadas, você precisa escrever sua própria implementação.
Você acessa as propriedades da classe usando a sintaxe de ponto normal no nome da classe:
fonte
Propriedades têm valores apenas em objetos, não em classes.
Se você precisar armazenar algo para todos os objetos de uma classe, precisará usar uma variável global. Você pode ocultá-lo declarando-o
static
no arquivo de implementação.Você também pode considerar o uso de relações específicas entre seus objetos: atribui uma função de mestre a um objeto específico da sua classe e vincula outros objetos a esse mestre. O mestre manterá o dicionário como uma propriedade simples. Penso em uma árvore como a usada para a hierarquia de exibição nos aplicativos de cacau.
Outra opção é criar um objeto de uma classe dedicada composta pelo dicionário da 'classe' e por um conjunto de todos os objetos relacionados a este dicionário. Isso é algo como
NSAutoreleasePool
no cacau.fonte
A partir do Xcode 8, você pode usar o atributo de propriedade de classe conforme respondido por Berbie.
No entanto, na implementação, você precisa definir o getter e o setter de classe para a propriedade de classe usando uma variável estática no lugar de um iVar.
Sample.h
Sample.m
fonte
Se você tiver muitas propriedades no nível de classe, um padrão singleton poderá estar em ordem. Algo assim:
E
Agora acesse suas propriedades em nível de classe como esta:
fonte
dispatch_once
aqui.[Tente esta solução, é simples] Você pode criar uma variável estática em uma classe Swift e chamá-la de qualquer classe Objective-C.
fonte