73 votes

Sont ints toujours initialisé à 0?

Est-il sûr de compter sur ints toujours être initialisé à 0 en Objective-C?

Plus précisément, lorsqu'un objet int ivars a été nouvellement instancié, il est sûr de supposer que son ivars ont de la valeur 0?

112voto

Adam Rosenfield Points 176408

Oui, classe les variables d'instance sont toujours initialisé à 0 (ou nil, NULLou false, selon le type de données exactes). Voir l' Objective-C 2.0 Langage de Programmation:

L' alloc méthode alloue dynamiquement de la mémoire pour la nouvelle instance de l'objet de variables et les initialise tous à 0-tout, c'est, à l'exception de l' isa variable qui relie la nouvelle instance de sa classe.


EDIT 2013-05-08
Apple semble avoir retiré le document ci-dessus (maintenant lié à La Wayback Machine). L' (actuellement) active le document de Programmation Objective-C contient une semblable citation:

L' alloc méthode a une autre tâche importante, qui est d'effacer la mémoire allouée pour les propriétés de l'objet en paramètre à zéro. Cela évite le problème habituel de la mémoire contenant les ordures de tout ce qui a été stocké avant, mais n'est pas suffisant pour initialiser un objet complètement.


Toutefois, c'est seulement vrai pour les variables d'instance d'une classe; c'est également vrai pour les POD types déclaré à la portée globale:

// At global scope
int a_global_var;  // guaranteed to be 0
NSString *a_global_string;  // guaranteed to be nil

À une exception près, c'est pas vrai pour les variables locales, ou pour les données allouées avec malloc() ou realloc(); il est vrai pour calloc(), depuis calloc() explicitement des zéros de la mémoire, qu'il alloue.

La seule exception est que lorsque l'option Automatique de Comptage de Référence (ARC) est activé, les pointeurs de pile à Objective-C objets sont implicitement initialisé à l' nil; cependant, il est toujours une bonne pratique pour initialiser explicitement à nil. De la Transition à l'ARC Notes de publication:

Pile les Variables Sont Initialisées avec nil

À l'aide de l'ARC, forte, faible, et autoreleasing pile variables sont maintenant implicitement initialisé avec nil

En C++ (et des objets en C++ utilisé en Objective-C++), classe les variables d'instance sont également pas initialisé à zéro. Vous devez explicitement les initialiser dans votre constructeur(s).

-1voto

Cody C Points 3309

Je ne pense pas que vous devez considérer toutes les valeurs d'initialisation. Si vous êtes à la construction de la logique d'un "0" de la valeur, vous devez le régler pour être sûr.

-2voto

Tom01 Points 1

Oui, en C les variables globales sont initialisées à zéro. En Objective-C, même au niveau local vars sont initialisées à zéro. Vous pouvez compter sur elle.

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