Artigos com a tag 'sintetizar @'

Objective-C: Notificações e Delegados

Em Objective-C temos dois muito usado para receber e enviar mensagens entre classes: as notificações e delegados. A diferença entre os dois, além de ser no nível de implementação, depende substancialmente "como" - objetos - pode receber uma mensagem. Primeiro deixe-me mostrar como o conceito nasceu de delegado.

Leia mais ...

CaptureView: capturar um UIView

o UIImageView ) in modo rapido. CaptureView permite a clone, sob a forma de imagem, qualquer modo de exibição ( UIView ou UIImageView ) rapidamente. (quindi visualizzato). O que é obtido é um objecto CaptureView que pode ser usado como uma normal UIView (então exibido). Capturando a "tela", ou uma parte dele, pode ser útil em muitos casos. Uma vez que a "imagem" de novo, ele pode ser manipulado sem preoccparsi de seu conteúdo.
Muitas vezes você tem múltiplos efeitos aninhados vista e Thet ou transformações na visão de que o pai contém todos nem sempre é uma solução ótima.

Leia mais ...

Objective-C: expor as propriedades em uma classe

Eu gostaria de mostrar e discutir alguns exemplos sobre como adicionar e manipular as propriedades em Objective-C classe. : Um exemplo clássico, precisamente, é a seguinte: na definição da nossa classe de interface que definimos duas propriedades nome e cognome :

1
2
3
4
5
6
7
8
9
10
11
/ / MyClass.h
# Importar <Foundation/Foundation.h>

NSObject { @ Interface MyClass: NSObject {
nome; NSString * nome;
cognome; NSString * nome;
}

retain ) NSString * nome; @ Property (reter) NSString * nome;
retain ) NSString * cognome; @ Property (reter) NSString * nome;
@ End

e setter usati rispettivamente per leggere ed impostare le nostre due proprietà: No arquivo de implementação, nós inserimos a declaração @synthesize de modo que Xcode irá produzir para nós a métodos getter e setter , respectivamente, usados ​​para ler e definir nossas duas propriedades:

1
2
3
4
5
6
7
8
/ / MyClass.m
# Importar "MyClass.h"

@ Implementação MyClass

@ Name sintetizar, sobrenome;

@ End

, possiamo scrive: Quando você estiver indo para usar a nossa classe MyClass , que é quando istanziaremo um objeto do tipo MyClass , podemos escrever:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/ / Qualquer outra classe, como AppDelegate
/ / No arquivo. H
# Importar <UIKit/UIKit.h>
# Importar "MyClass.h"

@ Classe TestViewController;

NSObject <UIApplicationDelegate> { @ TesAppDelegate Interface: NSObject {<UIApplicationDelegate>
UIWindow janela *;
* TestViewController viewController;

MyClass * myClass;
}

/ / No arquivo. M
MyClass alloc ] ; myClass = [MyClass alloc];
"Giovambattista" ; miaClasse.nome @ = "Giovambattista";
"miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "% @ = miaClasse.nome" miaClasse.nome);

Ou, o que é equivalente a:

1
2
3
/ / Sempre no arquivo. M
@ "Undolog" ] ; [SetNome myClass: @ "Undolog"];
"miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @" [myClass nome]);

So far so good. No entanto, ele poderia enganar a equivalência de "variabli" interno (ivar) como propriedade real. Para compreender a diferença, propor novamente o mesmo que fazer sem, desta vez, a @synthesize . . Agora, portanto, devemos tratar-nos a escrever a métodos getter e setter . Para enfatizar ainda mais as diferenças, as variáveis ​​internas rinominerò inserir um sublinhado antes do nome. Mas nós vemos o código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Importar <Foundation/Foundation.h>

NSObject { @ Interface MyClass: NSObject {
_nome; NSString * _name;
_cognome; NSString * _cognome;
}

NSString * ) nome; // get - ( NSString *) nome; / / pega
NSString * ) cognome; // get - ( NSString *) nome; / / pega

void ) setNome : ( NSString * ) stringaIngresso; // set - (Void) setNome: ( NSString *) stringaIngresso; / set /
void ) setCognome : ( NSString * ) stringaIngresso; // set - (Void) setCognome: ( NSString *) stringaIngresso; / set /

@ End

. Ao contrário do exemplo anterior, os apontadores para as variáveis ​​internas (incapsultate) tornaram-se _nome e _cognome . . @property è scomparso, in quanto non serve più. Além disso, existem quatro definições de métodos que representam o nosso get e set . @property desapareceu, como não precisava mais.
Vemos o arquivo de implementação MyClass.m :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Importar "MyClass.h"

@ Implementação MyClass

/ / Pega um "nome"
NSString * ) nome { - ( NSString *) nome {
_name Retorno;
}
/ / Definido como "nome"
void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso
_name = StringaIngresso;
}

/ / Pega para "sobrenome"
NSString * ) cognome { - ( NSString *) nome {
_cognome retornar;
}
/ / Definido como "Last Name"
void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso
_cognome = stringaIngresso;
}

@ End

Uma classe de modo escrita pode ser utilizado exactamente como o anterior, a saber:

1
2
3
4
5
6
7
8
MyClass alloc ] ; myClass = [MyClass alloc];
"Giovambattista" ; miaClasse.nome @ = "Giovambattista";
"miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "% @ = miaClasse.nome" miaClasse.nome);

/ / Ou, o que é equivalente a:

@ "Undolog" ] ; [SetNome myClass: @ "Undolog"];
"miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @" [myClass nome]);

e set , evidenziando – anche con l'aggiunta dell'underscore – le differenze tra il nome della proprietà e la sua ivar interna _nome . No nível de negligência educacional @synthesize nos obrigou a escrever "os seus próprios métodos de get e set , com destaque - mesmo com a adição dell'underscore - as diferenças entre o nome da propriedade e sua ivar interna _nome .
permette un reale controllo del dato prima della sua impostazione (o prima della sua lettura) e quindi un reale incapsulamento per proteggere la variabile interna. A nível funcional do uso pessoal dos métodos de get e set permite o controle real dos dados antes da sua definição (ou antes de sua leitura) e, em seguida, um encapsulamento real para proteger a variável interna.
Por exemplo, seria possível impedir a passagem de cadeias vazias para a propriedade de nome :

1
2
3
4
void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso
stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") stringaIngresso @ = "sem nome";
_name = StringaIngresso;
}

Outra variante

Se você quiser usar as variáveis ​​internas com o sublinhado na frente (que rpoviene Adobe ActionScript pode ser usado como bem) não é necessário abandonar o uso da diretiva @synthesize . Xcode torna possível "mesclar" os métodos acima:

1
2
_nome; Sintetizar @ name = _name;
_cognome; Sintetizar @ name = _cognome;

. Ao fazê-lo nós poderíamos usar internamente ponteiro _nome ", resumiu" - para o exterior - como uma propriedade de nome . e setter , è vero anche che lo fa solo se non li trova, quindi se desiderate “implementare” un vostro metodo di getter e/o setter potete farlo anche se avete usato la direttiva @synthesize . Além disso, embora o uso de @synthesize produz métodos de geração (mensagens) de getter e setter , também é verdade que ele faz isso somente se ele encontra-los, por isso, se você quer "implementar" um método para o seu getter e / ou setter pode fazer isso mesmo se você usou a directiva @synthesize .

As alocações de memória

Nos exemplos acima eu ter omitido alguns detalhes importantes para uma implementação real. Primeiro de tudo, eu ainda não mostrei qualquer método init() , útil para a inicialização do objeto e valores padrão. Além disso, falta-lhe a adição de um método dealloc() :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/ Arquivo / MyClass.m
# Importar "MyClass.h"

@ Implementação MyClass

id ) init { - (Id) {INIT
self = [ super init ] ) { if (self = [super init]) {
"Nome preimpostato" ; _name @ = "Nome da predefinição";
"Cognome preimpostato" ; _cognome @ = "Nome da predefinição";
}
retornar auto;
}

void ) dealloc { - (Void) {dealloc
; [_name Lançamento];
; [_cognome Lançamento];
; [Super dealloc];
}

NSString * ) nome { - ( NSString *) nome {
_name Retorno;
}
void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso
stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") stringaIngresso @ = "sem nome";
_name = StringaIngresso;
}

NSString * ) cognome { - ( NSString *) nome {
_cognome retornar;
}
void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso
_cognome = stringaIngresso;
}

@ End

, etc… No futuro, vamos então ver os detalhes sobre as propriedades readonly , retain , etc ... :)

Leia mais ...


Pare SOPA