3 votes

CGFloat a une valeur par défaut étrange

Je viens de me heurter à un bug très étrange, qui est probablement dû à mon manque de connaissance des types de données Objective C. Si je fais ceci :

CGFloat newY;
NSLog(@"newY is %f", newY);

Le journal renvoie 0.0, bien que je m'attende à nil, mais ce n'est pas le vrai problème. Si j'exporte maintenant cette application vers un fichier .ipa iOS et installe l'application à partir de là, la valeur de newY est automatiquement initialisée à 185.000. D'où vient cette valeur et pourquoi est-elle différente lorsque l'application est installée à partir du .ipa et non directement depuis XCode?

Je serais vraiment reconnaissant de toute compréhension sur ce qui se passe, cela n'a aucun sens pour moi.

4voto

Aderstedt Points 906

NewY n'est pas initialisé à zéro, c'est ce qui se trouve sur la pile (où newY est stocké) à ce moment-là. Cela peut être différent sur différentes plateformes mais peut également changer entre les exécutions.

Il est très probable que vous receviez un avertissement vous informant qu'il est dangereux d'utiliser newY avant de l'initialiser vous-même.

1voto

Oyashiro Points 330

CGFloat n'est pas un pointeur, il ne peut donc pas être assigné à nil.

C'est une variable automatique, elle est donc placée en mémoire, et prend la valeur qui y est déjà stockée si vous ne l'initialisez pas. La valeur est indéfinie, vous devriez donc l'initialiser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X