Exécuter une méthode après n secondes
Toute la famille performSelector est vraiment intéressant et peut être utile dans une multitude de cas. Son application la plus simple et la plus courante est la suivante:
1 2 3 4 5
| @selector ( myMethod ) withObject : nil afterDelay : 3 ] ; [Self performSelector: @ selector (myMethod) withObject: afterDelay nul: 3]; / / void ) myMethod { - (Void) {myMethod "Hello World!" ) ; NSLog (@ "Bonjour tout le monde!"); } |
Cependant, considérer que le "timer" n'est pas exacte. Cette procédure devrait donc être utilisée lorsqu'il n'est pas nécessaire de précision «considérable» du temps.
Récupérer la version de la
1 2
| version = [ [ [ NSBundle mainBundle ] infoDictionary ] objectForKey : @ "CFBundleVersion" ] ; NSString * version = [[[ NSBundle mainBundle] infoDictionary] objectForKey: @ "CFBundleVersion"]; "versione = %@" , version ) ; NSLog (@ "Version =% @", version); |
Oui, c'est vrai ou vrai?
e TRUE sono in pratica la stessa edentica cosa: Aller à passer au peigne fin l'iPhone d'Apple noyau, vous pouvez comprendre que YES , true et TRUE sont pratiquement la même chose edentica:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| / / Définition de la SEJ # Définir OUI (BOOL) 1 # Définir NO 0 (BOOL)
/ / Définition d'une véritable # Définir une véritable # Définir 0 false
/ / Définition de VRAI # Si! Défini (TRUE) # Définir 1 VRAI # Endif
# Si! Défini (FAUX) # Définir 0 FAUX # Endif |
Au moins pour le moment ...
Vibration
1 2 3
| # Import <AudioToolbox/AudioToolbox.h> / / ; AudioServicesPlaySystemSound (kSystemSoundID_Vibrate); |
Pointeur CGImageRef à partir d'un UIImage
1 2 3 4
| [ UIImage imageNamed : @ "LittleHeart.png" ] ; UIImage * cœur = [UIImage imageNamed: @ "LittleHeart.png"]; heart CGImage ] ; CGImageRef image = [coeur CGImage]; / / L'image peut maintenant être «pixellisés» sur une CGContextRef CGRect ) { 0 , 0 , 100 , 100 } , image ) ; CGContextDrawImage (c, (CGRect) {0, 0, 100, 100}, image); |
Animations
1 2 3 4 5
| nil context : NULL ] ; [BeginAnimations UIView: contexte nulle: NULL]; 1.5 ] ; [UIView setAnimationDuration: 1,5]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; / / ... ; [CommitAnimations UIView]; |
NSLog
1 2 3
| "NSString object %@ " , myString ) ; NSLog (@ "NSString objet% @", maChaine); "Float: %f " , myFloat ) ; NSLog (@ "float:% f", myFloat); "Integer: %i " , myInt ) ; NSLog (@ "Integer:% s", myInt); |
Convertisseur de RGB à UIColor
1
| # Définir RGBA (r, g, b, a) [UIColor colorWithRed: r/255.0 vert: bleu g/255.0: b/255.0 alpha: a] |
Passer des paramètres à une NSTimer
Exploiter le paramètre userInfo vous pouvez envoyer un pointeur vers notre objet à la méthode invoquée par minuterie.
1 2 3 4 5 6 7 8 9 10 11 12 13
| scheduledTimerWithTimeInterval : 1 target : self selector : @selector ( timerMethod ) userInfo : objectPointer repeats : YES ] ; [ NSTimer scheduledTimerWithTimeInterval: 1 cible: sélecteur de soi: @ selector (timerMethod) userInfo: répétitions objectPointer: OUI]; / / ... void ) timerMethod : ( NSTimer * ) timer { - (Void) timerMethod: ( NSTimer *) {timer / / Récupérer le pointeur à mon objet timer userInfo ] ; objectPointer = [minuterie userInfo]; / / Ou myMethod ] ; [[Minuterie userInfo] myMethod]; [ [ timer userInfo ] myProperty ] ; int a = [[minuterie userInfo] myProperty]; / / Quel est le même [ objectPointer myProperty ] ; int a = [objectPointer myProperty]; } |
Durée
Voici une façon simple de calculer le temps court nécessaires pour vérifier la vitesse d'exécution de code:
1 2 3 4
| ; CFAbsoluteTime initialTime CFAbsoluteTimeGetCurrent = (); / / ... code ; CFAbsoluteTime finalTime CFAbsoluteTimeGetCurrent = (); "Tempo trascorso %f" , finalTime - initialTime ) ; NSLog (@ "f écoulé% du temps", finalTime - initialTime); |
En savoir plus ...
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 interface de classe, nous définissons deux propriétés nome et cognome :
e setter usati rispettivamente per leggere ed impostare le nostre due proprietà: Dans le fichier d'implémentation, nous insérons la déclaration @synthesize afin que Xcode va produire pour nous des 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 œuvre MyClass
Résumer le nom @, le nom de famille;
@ Fin |
, possiamo scrive: Lorsque vous allez utiliser notre classe MyClass , c'est à ce moment istanziaremo un objet de type MyClass , on peut é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; MyClass * myClass; } / / Dans le fichier. M MyClass alloc ] ; myClass = [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. M @ "Undolog" ] ; [SetNome myClass: @ "Undolog"]; "miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @", [myClass nom]); |
Jusqu'ici tout va bien. Toutefois, il pourrait induire en erreur l'équivalence des "variabli" interne (Ivar) comme des biens immobiliers. Pour comprendre la différence, proposer à nouveau la même chose que faire sans, cette fois, le @synthesize . . Maintenant, donc, nous devrions traiter avec nous pour écrire les méthodes getter et setter . Afin de mieux souligner les différences, les variables internes rinominerò insérant un trait 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 à l'exemple précédent, les pointeurs vers les variables internes (incapsultate) sont devenus _nome et _cognome . . @property è scomparso, in quanto non serve più. En outre, il existe quatre définitions de méthodes qui représentent notre get et set . @property a disparu, ne sont 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 œuvre MyClass / / Obtenir un "nom" NSString * ) nome { - ( NSString *) nom { _Nom Retour; } / / Set pour "nom" void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso _Nom = StringaIngresso; } / / Obtenir de "nom" NSString * ) cognome { - ( NSString *) nom { _cognome revenir; } / / Set pour "Last Name" void ) setCognome : ( NSString * ) stringaIngresso { - (Void) setCognome: ( NSString *) {stringaIngresso _cognome = stringaIngresso; } @ Fin |
Une classe de sorte écrite peut être utilisé exactement comme le précédent, à savoir:
1 2 3 4 5 6 7 8
| MyClass alloc ] ; myClass = [MaClasse alloc]; "Giovambattista" ; miaClasse.nome @ = "Giovambattista"; "miaClasse.nome = %@" , miaClasse.nome ) ; NSLog (@ "% @ = miaClasse.nome" miaClasse.nome);
/ / Ou, ce qui équivaut à:
@ "Undolog" ] ; [SetNome myClass: @ "Undolog"]; "miaClasse.nome = %@" , [ miaClasse nome ] ) ; NSLog (@ "miaClasse.nome =% @", [myClass nom]); |
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és à écrire "leurs propres" méthodes get et set , en soulignant - même avec l'ajout dell'underscore - les différences entre le nom de la propriété et son Ivar interne _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. À un niveau fonctionnel à l'usage personnel des méthodes get et set permet un contrôle réel des données avant sa mise (ou avant sa lecture), puis une encapsulation réelle afin de protéger la variable interne.
Par exemple, il serait possible d'empêcher le passage des chaînes vides à la propriété nome :
1 2 3 4
| void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") stringaIngresso @ = "no name"; _Nom = StringaIngresso; } |
Autre variante
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 ci-dessus:
1 2
| _nome; @ Name = Synthétiser _Nom; _cognome; @ Name = Synthétiser _cognome; |
. Ce faisant, nous pourrions utiliser en interne pointeur _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 . En outre, bien que l'utilisation de @synthesize produit méthodes de génération automatique (messages) de getter et setter , est également vrai que ce n'est que si elle les trouve, donc si vous voulez "mettre en œuvre" une méthode pour votre getter et / ou setter peut le faire même si vous avez utilisé la directive @synthesize .
Les allocations de mémoire
Dans les exemples qui précèdent, 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 d'objet et les valeurs par défaut. De plus, il manque l'addition d'un procédé 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 œuvre MyClass id ) init { - (Id) {init self = [ super init ] ) { if (self = [super init]) { "Nome preimpostato" ; _Nom @ = "Nom du paramètre prédéfini"; "Cognome preimpostato" ; _cognome @ = "Nom du paramètre prédéfini"; } retourner soi-même; } void ) dealloc { - (Void) dealloc { ; [_Nom De presse]; ; [_cognome De presse]; ; [Super dealloc]; } NSString * ) nome { - ( NSString *) nom { _Nom Retour; } void ) setNome : ( NSString * ) stringaIngresso { - (Void) setNome: ( NSString *) {stringaIngresso stringaIngresso == @ "" ) stringaIngresso = @ "senza nome" ; if (@ stringaIngresso == "") stringaIngresso @ = "no name"; _Nom = StringaIngresso; } NSString * ) cognome { - ( NSString *) nom { _cognome revenir; } 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 ... 
En savoir plus ...
non funzionano quando un UIButton è impostato in modalità UIButtonTypeCustom ! Les Etats UIControlStateSelected ou UIControlStateHighlighted ne fonctionne pas quand un UIButton mode est réglé UIButtonTypeCustom ! Ou plutôt, ne fonctionnent pas (parce que réservés pour d'autres types de bouton), par exemple pour créer un bouton à deux états: la note bascule. Si nous avons créé deux images (stato1.png et stato2.png) pour notre bouton, nous pouvons procéder comme suit:
1 2 3
| / / Le fichier en-tête que nous créons une variable globale pour usaremo / / Bascule le chèque était ToggleFlag BOOL; |
Maintenant nous allons créer notre bouton:
1 2 3 4 5 6 7 8 9
| / / Nous créons un bouton et nous le plaçons d'abord dans l'état "stato1.png" / / Modifier initWithFrame: (CGRect)} {100,100,50,50 avec la position et / / Taille de l'image a ; toggleFlag = OUI; [ [ UIButton buttonWithType : UIButtonTypeCustom ] initWithFrame : ( CGRect ) { 100 , 100 , 50 , 50 } ] ; UIButton ToggleButton * = [[UIButton buttonWithType: UIButtonTypeCustom] initWithFrame: (CGRect) {100, 100, 50, 50}]; @ "" forState : UIControlStateNormal ] ; [ToggleButton setTitle: @ "" forState: UIControlStateNormal]; [ UIImage imageNamed : @ "stato1.png" ] forState : UIControlStateNormal ] ; [ToggleButton setBackgroundImage: [UIImage imageNamed: @ "stato1.png"] forState: UIControlStateNormal]; self action : @selector ( onToggle : ) forControlEvents : UIControlEventTouchUpInside ] ; [AddTarget ToggleButton: action d'auto: @ selector (onToggle :) forControlEvents: UIControlEventTouchUpInside]; toggleButton ] ; [Self.view addSubview: ToggleButton]; |
Lorsque vous cliquez sur le bouton envoyer un message à être gérés onToggle :
1 2 3 4 5 6 7
| void ) onToggle : ( id ) sender { - (Void) onToggle: (id) sender { / / Récupération de pointeur vers UIButton ( UIButton * ) sender; UIButton ButtonClicked * = (UIButton *) l'expéditeur; / / Exécution de la bascule, toggleFlag = toggleFlag!; [ UIImage imageNamed : ( toggleFlag ) ? @ "stato1.png" : @ "stato2.png" ] forState : UIControlStateNormal ] ; [ButtonClicked setBackgroundImage: [UIImage imageNamed: (toggleFlag) @ "Stato1.png" @ "stato2.png"] forState:? UIControlStateNormal]; } |
En savoir plus ...
Une alternative très facile à exécuter un flux d'un fichier mp3 sur l'iPhone d'Apple pourrait être:
En savoir plus ...
1. Cordes sur plusieurs lignes
Dans Xcode, vous pouvez "casser" une chaîne sur plusieurs lignes en insérant à la fin avec une barre oblique inverse "\". Cette fonctionnalité peut être utile lorsque, par exemple, nous voulons insérer le texte HTML dans un contrôle UIWebView :
En savoir plus ...
Le contrôle UIDatePicker est peut-être la plus belle contrôleur présente des graphiques sur l'iPhone d'Apple. Outre la beauté est aussi simple à utiliser, extrêmement polyvalent et utilisé dans de nombreuses situations.
En savoir plus ...
o CGPoint , ad esempio. La syntaxe NSLog(@"%@", ... ); qui fonctionne et est utilisé pour obtenir des informations sur les objets, mais ne fonctionne pas sur les types de données tels que C struct CGRect ou CGPoint , par exemple. o NSStringFromCGPoint : Pour profiter de NSLog(@"%@", ... ); également de style C structs nous pouvons nous appuyer sur les fonctions de conversion telles que NSStringFromCGRect() ou NSStringFromCGPoint :
1 2 3 4 5
| CGRect ) { 10 , 20 , 30 , 40 } ; CGRect mioRect = (CGRect) {10, 20, 30, 40}; CGPoint ) { 32 , 64 } ; CGPoint mioPoint = (CGPoint) {32, 64}; / / "Info rettangolo: %@" , NSStringFromCGRect ( mioRect ) ) ; NSLog (@ "rectangle Info:% @", NSStringFromCGRect (mioRect)); "Info point: %@" , NSStringFromCGPoint ( mioPoint ) ) ; NSLog (@ "point info:% @", NSStringFromCGPoint (mioPoint)); |
Plus précisément, il est possible d'affiner les procédures correspondantes de petites macros utiles comme:
1
| # Définir NSLogRect (rect) NSLog (@ "% s (% 0.0f, 0.0f%) 0.0f%% 0.0fx", # rect, rect.origin.x, rect.origin.y, rect.size.width , rect.size.height) |
Ou:
1 2 3 4
| # Définir NSLogCGPoint (point) NSLog (@ "% s (% 0.0f, 0.0f%)", # Point.X point, Point.y)
CGPoint ) { 32 , 64 } ; CGPoint mioPoint = (CGPoint) {32, 64}; ; NSLogCGPoint (mioPoint); |
Cela vous donnera en sortie:
1
| 32 , 64 ) mioPoint: (32, 64) |
En savoir plus ...
Application Icon
Le 57 × 57 pixels icône qui représentera notre application est "compromise" automatiquement par l'iPhone d'Apple: ajoute un bord arrondi, une éclaircie et 3D. Ce réglage peut être modifié en sélectionnant le fichier [nome applicazione]-Info.plist et en ajoutant la propriété "Icône comprend déjà des effets de brillance et de biseau":
En savoir plus ...
XCode est un environnement de développement très puissant et se réserve quelques surprises. Il permet à une fonction similaire à la "snippet" de la célèbre éditeur TextMate . En pratique, il est possible d'insérer des blocs de code en utilisant la séquence ESC + une combinaison d'un ou de plusieurs séquences de caractères. e otterrete: Par exemple, si vous souhaitez insérer un bloc if essayez d'appuyer sur ESC+if et vous obtiendrez:

. Comme le montre la figure, un menu apparaît (le même auto-complétion) où vous pouvez choisir entre un simple bloc if ou if/else . En cliquant sur "envoyer", vous obtenez:

Voici deux liens pour la liste complète des raccourcis clavier:
En savoir plus ...
Si vous avez besoin pour générer des nombres aléatoires dans une application doivent mettre de côté l'iPhone d'Apple Objective-C, car il ne propose pas de l'ordre des classes. La solution est proposé que le dossier C: rand(), srand(), random(), srandom() e arc4random() .
En savoir plus ...
Derniers Commentaires
Rosanna : Quelqu'un peut-il me dire comment puis-je supprimer la fenêtre composant logiciel enfichable Shots qui s'ouvre automatiquement lorsque je ...
bienheureux Maresca : Je ne peux pas télécharger n'importe quel skypemote me spiegaaa
Matthieu : Bonjour à tous, malheureusement, Google ne permet pas l'utilisation de l'API pour Flash, mais il sera ...
Giovambattista Fazioli : @ GM: Si vous téléchargez des images vers un autre serveur (que WordPress ne peux pas ...
GM : Salut, désolé pour ressusciter un vieux post, mais j'espère que vous pouvez me donner un coup de main. Comment puis-je, avec cette méthode, ...