Niveau technique : très avancé
Les concepts détaillés dans l’article sont donnés pour macOS, et s’appliquent tels quels à iOS, éventuellement à Java (ramasse miette).
Read MoreNiveau technique : très avancé
Les concepts détaillés dans l’article sont donnés pour macOS, et s’appliquent tels quels à iOS, éventuellement à Java (ramasse miette).
Read MoreLors d’un entretien récent il m’a été posé la question suivante :
« qu’est-ce qu’un Protocole ? »
La question m’a un peu désemparé puisqu’il s’agit d’un des tout premiers concepts que l’on apprend en Cocoa (vous sauriez expliquer par exemple ce qu’est un PPCM ? (1))
Je donne donc une réponse improvisée, en l’occurrence approximative, et on me répond que
« c’est un contrat, c’est à dire un ensemble de fonctions que vous vous engagez à implémenter »
C’est une bonne définition, néanmoins la réalité est un peu plus subtile.
Read More- Exemple de comportement différent de code iOS selon qu’il s’exécute sur l’émulateur ou un device (la machine, i.e. iPhone/iPad) :
Soit le code iOS suivant (qui permet de consulter un tableau comme s’il était bouclé sur lui même) :
NSUInteger p0_prevIndex;
p0_prevIndex = p0Index – diffAtP0;
if(p0Index < diffAtP0)
p0_prevIndex += iPoints.count;
(le test équivaut à (p0_prevIndex < 0), qui évidemment ne pourrait arriver que s’il était de type NSInteger)
Le code fonctionne parfaitement sous émulateur mais conduit à un crash à la ligne suivante (non représentée), à la lecture du tableau (lecture à l’index p0_prevIndex alors que celui-ci vaut iPoints.count)
La lecture des valeurs à la 3° ligne donne
(lldb) pri p0Index
(NSUInteger) $3 = 0
(lldb) pri diffAtP0
(CGFloat) $2 = 2
(lldb) pri p0_prevIndex
(NSUInteger) $5 = 0
->p0_prevIndex devrait valoir (NSUInteger)(-2) (soit 4294967294, peu importe), et donc (iPoints.count-2) juste après.
Affichage d’autres valeurs :
(lldb) pri p0Index – diffAtP0
(float) $4 = -2
-> OK
(lldb) pri p0_prevIndex = p0Index – diffAtP0
(NSUInteger) $6 = 0
-> pourquoi ? On devrait obtenir la valeur correspondant à -2…
(lldb) pri p0_prevIndex = -2
(NSUInteger) $7 = 4294967294
-> OK, l’affectation directe fonctionne.
Le pb vient d’un typecast, car diffAtP0 est de type CGFloat (en fait le type des iPoints).
Le déclarer en NSUInteger apporte la solution.
La vraie remarque est que le crash ne survient sur aucun des émulateurs car le typecast effectué est alors correct.
Read MoreCatégorie : application iPhone/iPad
Licence : utilisation gratuite en version de base.
Version : 2.5, 20/10/2017.
Résumé : « myScore » est une application d’écriture manuscrite de partitions, s’appuyant sur la librairie WM_GSRecognizer développée pour l’occasion.
Read More
Catégorie : application iPhone/iPad
Licence : utilisation gratuite
Version : 1.0, 07/03/2014
Publicités : aucune
Résumé : « myCamera » est une application pour iPhone/iPad vous permettant de piloter une caméra WiFi ou IP.
Technologies mises en œuvre :
Réseau : cgi (over http), commandes asynchrones et synchrones,
iOS : timers, images, mise à l’échelle et zoom, gestures (click/longPress/pinch), Notifications Center et Observers, UIViewAnimation, préférences.