Puntatori non inizializzati Objective-C vs puntatori null
-
06-07-2019 - |
Domanda
Forse la mia memoria è andata completamente fuori di testa, ma penso di ricordare che dichiarare i puntatori senza inizializzarli li ha portati a zero. Ma recentemente questo non sembra essere il caso. È sempre stato così? O ha qualcosa a che fare con le impostazioni del compilatore?
Soluzione
Le variabili di istanza degli oggetti sono inizializzate su nil
in alloc
(l'intero oggetto è azzerato).
Modifica Inoltre, le variabili di archiviazione globali e statiche vengono inizializzate su zero (6.7.8 10 del Standard C99 , grazie Derek per averlo segnalato).
Le variabili dello stack locale non vengono inizializzate automaticamente. Questo non è cambiato nella storia conosciuta.
Altri suggerimenti
Da Transizione alle note di rilascio ARC :
Le variabili di stack vengono inizializzate con
nil
L'utilizzo di ARC, le variabili di stack forte, debole e di autoreleasing sono ora implicitamente inizializzate con
nil
. Ad esempio:- (void)myMethod { NSString *name; NSLog(@"name: %@", name); }registrerà
null
per il valore del nome piuttosto che forse il crash.