En Objective-C, nous avons deux très utilisé pour recevoir et envoyer des messages entre les classes: les notifications et les délégués. La différence entre les deux, en plus d'être au niveau de mise en œuvre, dépend en grande partie sur le «comment» - objets - peut recevoir un message. D'abord laissez-moi montrer comment le concept est né de délégué.
Articles taggés avec '@ synthétiser "
Objective-C: Notifications et délégués
CaptureView: capturer un UIView
o UIImageView ) in modo rapido. CaptureView vous permet de cloner, comme une image, n'importe quelle vue ( UIView ou UIImageView ) rapidement. (quindi visualizzato). Qu'est-ce que vous obtenez est un objet CaptureView qui peut être utilisé comme une normale UIView (alors affiché). Capturer "l'écran", ou toute partie de celui-ci, peuvent être utiles dans de nombreux cas. Une fois la nouvelle «image», il peut être manipulé sans preoccparsi de son contenu.
Souvent, vous disposez de plusieurs vue imbriquées et effectue ou le traitement des effets sur la vue de la mère qui les contient tous n'est pas toujours une solution optimale.
Objective-C: les propriétés d'exposer dans une classe
Je voudrais montrer et de discuter quelques exemples sur la façon d'ajouter et de manipuler les propriétés en Objective-C de classe. : Un exemple classique, précisément, est la suivante, dans la définition de notre classe d'interface définit deux propriétés nome et cognome :
1 2 3 4 5 6 7 8 9 10 11 |
e setter usati rispettivamente per leggere ed impostare le nostre due proprietà: Dans le fichier de mise en œuvre de l'instruction INSERT @synthesize afin que Xcode va produire pour nous les méthodes getter et setter , respectivement, utilisé pour lire et définir nos deux propriétés:
1 2 3 4 5 6 7 8 | / / MyClass.m # Import "MyClass.h" @ Mise en oeuvre MaClasse Synthétiser le nom @, prénom; @ Fin |
, possiamo scrive: Lorsque vous allez utiliser notre classe MyClass , qui est quand istanziaremo un objet de type MyClass , nous pouvons écrire:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | / / Tout autre classe, comme AppDelegate / / Dans le fichier. H # Import <UIKit/UIKit.h> # Import "MyClass.h" @ Classe TestViewController; NSObject <UIApplicationDelegate> { TesAppDelegate @ interface: NSObject {<UIApplicationDelegate> UIWindow * fenêtre; * TestViewController ViewController; MaClasse * maClasse; } / / Dans le fichier. M MyClass alloc ] ; maClasse = [MaClasse alloc]; "Giovambattista" ; miaClasse.nome @ = "Giovambattista"; "miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "miaClasse.nome =% @", miaClasse.nome); |
Ou, ce qui équivaut à:
1 2 3 | / / Toujours dans le fichier de M. @ "Undolog" ] ; [SetNome maClasse: @ "Undolog"]; "miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @", [nom maClasse]); |
Jusqu'ici tout va bien. Cependant, il pourrait induire en erreur l'équivalence de la «variable» interne (Ivar) avec le nom de la propriété elle-même. Pour comprendre la différence, de proposer à nouveau la même chose que faire sans, cette fois, les @synthesize . . Maintenant, donc, nous devrions prendre soin d'écrire les méthodes getter et setter . Afin de mieux souligner les différences, va renommer les variables internes en insérant un caractère de soulignement devant le nom. Mais nous voyons le code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # Import <Foundation/Foundation.h> NSObject { @ Interface MaClasse: NSObject { _nome; NSString * _Nom; _cognome; NSString * _cognome; } NSString * ) nome; // get - ( NSString *) nom; / / récupère NSString * ) cognome; // get - ( NSString *) nom; / / récupère void ) setNome : ( NSString * ) stringaIngresso; // set - (Void) setNome: ( NSString *) stringaIngresso; / / set void ) setCognome : ( NSString * ) stringaIngresso; // set - (Void) setCognome: ( NSString *) stringaIngresso; / / set @ Fin |
. Contrairement à la précédente pour les pointeurs de variables internes (incapsultate) sont devenus _nome et _cognome . . @property è scomparso, in quanto non serve più. En outre, il existe quatre définitions des méthodes qui représentent notre get et de set . @property a disparu, comme n'étant plus nécessaires.
Nous voyons le fichier d'implémentation 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 | # Import "MyClass.h" @ Mise en oeuvre MaClasse / / Obtenir un "nom" NSString * ) nome { - ( NSString *) nom { _Nom Retour; } / / Set pour "nom" void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso _Nom StringaIngresso =; } / / Obtenir de "surnom" NSString * ) cognome { - ( NSString *) nom { _cognome retour; } / / Set pour "patronyme" void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso _cognome = stringaIngresso; } @ Fin |
Écrit comme une classe peut être utilisé exactement comme la précédente, à savoir:
1 2 3 4 5 6 7 8 | MyClass alloc ] ; maClasse = [MaClasse alloc]; "Giovambattista" ; miaClasse.nome @ = "Giovambattista"; "miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "miaClasse.nome =% @", miaClasse.nome); / / Ou, ce qui équivaut à: @ "Undolog" ] ; [SetNome maClasse: @ "Undolog"]; "miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @", [nom maClasse]); |
e set , evidenziando – anche con l'aggiunta dell'underscore – le differenze tra il nome della proprietà e la sua ivar interna _nome . Au niveau de la négligence éducative @synthesize nous a forcé à écrire "leur propre" méthodes get et de set , en soulignant - même avec l'ajout dell'underscore - les différences entre le nom de propriété et ses Ivar internes _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. Au niveau fonctionnel à l'usage personnel des méthodes get et de set permet un contrôle réel des données avant sa mise (ou avant sa lecture), puis une encapsulation réel de protéger la variable interne.
Par exemple, il serait possible d'empêcher le passage des chaînes de vide à la propriété nome :
1 2 3 4 |
D'autres variations
Si vous souhaitez utiliser les variables internes avec le trait de soulignement en face (qui rpoviene Adobe ActionScript pourrait être utilisé aussi bien) n'est pas nécessaire d'abandonner l'utilisation de la directive @synthesize . Xcode permet de "fusionner" les méthodes mentionnées ci-dessus:
1 2 | _nome; Synthétiser @ name = _Nom; _cognome; Synthétiser le nom @ = _cognome; |
. En faisant cela, nous pourrions utiliser le pointeur à l'interne _nome ", résume" - à l'extérieur - comme une propriété 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 . Par ailleurs, il est vrai que l'utilisation de @synthesize produit des méthodes de génération automatique (messages) de getter et setter , il est également vrai que s'il ne les trouve pas, donc si vous voulez "mettre en œuvre« une méthode pour vos getter et / ou setter vous pouvez le faire même si vous avez utilisé la directive @synthesize .
Les allocations de mémoire
Dans les exemples ci-dessus, j'ai omis certains détails importants pour une mise en œuvre réelle. Tout d'abord, je n'ai pas montré toute méthode init() , utile pour l'initialisation objet et les valeurs par défaut. Par ailleurs, il est l'ajout d'une méthode 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 | / / Fichier MyClass.m # Import "MyClass.h" @ Mise en oeuvre MaClasse id ) init { - (Id) {initialisation self = [ super init ] ) { if (self = [super init]) { "Nome preimpostato" ; _Nom @ = "Nom Preset"; "Cognome preimpostato" ; _cognome @ = "Nom Preset"; } le retour de soi; } void ) dealloc { - (Void) dealloc { ; [Communiqué de _Nom]; ; [Communiqué de _cognome]; ; [Super dealloc]; } NSString * ) nome { - ( NSString *) nom { _Nom Retour; } void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") @ stringaIngresso = "sans nom"; _Nom StringaIngresso =; } NSString * ) cognome { - ( NSString *) nom { _cognome retour; } void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso _cognome = stringaIngresso; } @ Fin |
, etc… Dans l'avenir, nous verrons ensuite les détails sur les propriétés readonly , retain , etc ... ![]()






Derniers Commentaires
Robert : Je rispsoto vos questions avec plaisir. L'idée est vraiment géniale. Je suis à la recherche d'une solution ...
Sting : @ Darius - vous pouvez voir un exemple ici: http://www.fight4fun.it/ cliquant sur: CARTES j'espère ...
Vik : Giustappunto je travaille sur un projet et le client m'a demandé de montrer toutes les nouvelles (qui sont CPT) au ...
Giovambattista Fazioli : @ paso: absolument. Il suffit d'identifier le champ [CCI] entrée [/ cci] que vous souhaitez ...
paso : Bonjour je voudrais demander un service, vous pouvez utiliser le sélecteur de date avec cform7 j'ai spiegp mieux que je peux mettre en œuvre ...