Jsou ints vždy inicializuje na 0?

hlasů
72

Je bezpečné počítat ints neustále inicializována na hodnotu 0 v Objective-C?

Přesněji řečeno, když objekt s intIvars byla nově vytvořena, je to bezpečné předpokládat, že jeho Ivars má hodnotu 0?

Položena 13/06/2009 v 15:58
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
110

Ano, třída instance proměnné jsou vždy inicializuje na 0 (nebo nil, NULLnebo false, v závislosti na konkrétním typu dat). Podívejte se na Objective-C 2.0 Programming Language :

allocMetoda dynamicky přiděluje paměť pro proměnné instancí nový objekt a inicializuje všechny na 0-all, to znamená, že s výjimkou isaproměnné, která spojuje nové instance do své třídě.


EDIT 05.8.2013
Apple Zdá se, že jste odstranili z výše uvedených dokumentů (nyní propojen s Wayback Machine). The (v současné době) aktivní dokument programování s Objective-C obsahuje podobné citace:

allocMetoda má ještě jeden důležitý úkol, který má vyklidit paměti přidělené pro vlastností objektu nastavením na nulu. Tím se zabrání obvyklý problém paměti obsahující odpadky z jakékoliv byl uložen dříve, ale ne natolik, aby zcela inicializovat objekt.


Nicméně, toto je jen pravdivé pro instance proměnné třídy; to platí i pro typy POD deklarované v globálním měřítku:

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

S jednou výjimkou, že je to pravda, pro lokální proměnné, nebo pro data přidělených s malloc()nebo realloc(); to platí i pro calloc(), neboť calloc()výslovně nuly na paměti, že přiděluje.

Jedinou výjimkou je, že když je povoleno automatické počítání referencí (ARC), stoh ukazatele na objekty Objective-C jsou implicitně nastaveny na nil; Nicméně, je to stále dobré praxe výslovně inicializaci jim nil. Od přechodu na Arc Poznámky k verzi :

Stack proměnné jsou inicializovány s nil

Používání ARC, silný, slabý, a autoreleasing proměnnými jsou nyní implicitně inicializovány nil

V C ++ (a C ++ objekty používají v Objective-C ++), třída instance proměnné jsou také nejsou nulové inicializován. Je nutné explicitně inicializovat je ve svém konstruktoru (y).

Odpovězeno 13/06/2009 v 16:03
zdroj uživatelem

hlasů
-1

Nemyslím si, že byste měli předpokládat, všechny hodnoty pro inicializaci. Pokud vytváříte logiku okolo hodnoty „0“, měli byste ji nastavit pro jistotu.

Odpovězeno 13/06/2009 v 16:01
zdroj uživatelem

hlasů
-2

Ano, v C globální Vars jsou inicializovány na nulu. V Objective-C jsou i místní vars inicializuje na nulu. Můžeš s tím počítat.

Odpovězeno 23/05/2013 v 16:58
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more