Est-il sûr de compter sur int
s 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?
Est-il sûr de compter sur int
s 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?
Oui, classe les variables d'instance sont toujours initialisé à 0 (ou nil
, NULL
ou 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).
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.