Cíl C dvoufázová konstrukce objektů

hlasů
13

Četl jsem se na RAII a samostatným vs. dvoufázového výstavby / inicializace. Z nějakého důvodu jsem byl v dvoufázovém kempu Až donedávna, protože v určitém okamžiku musel jsem slyšel, že je to špatné dělat náchylné k chybám operace v konstruktoru. Nicméně si myslím, že jsem nyní přesvědčen, že jednofázový je výhodnější, na základě otázek, které jsem četl na SO a ostatní články.

Moje otázka zní: Proč Objective C používat přístup dvoufázové (alloc / init) téměř výhradně pro non-pohodlí konstruktérů? Je nějaký konkrétní důvod v jazyce, nebo to bylo jen rozhodnutí design návrháři?

Položena 04/06/2009 v 01:59
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
28

Mám záviděníhodné situaci pracovat pro člověka, který napsal +allocv roce 1991, a já se s ním stalo položit velmi podobnou otázku před několika měsíci. Přídavek +allocbyl za účelem poskytování +allocWithZone:, který byl za účelem doplnění paměti bazény v NeXTSTEPu 2.0, kde paměť byla velmi těsná (4M). To umožnilo volající ke kontrole, kde se objekty přiděleno v paměti. Byla to náhrada za +newa její příbuzní, což bylo (a stále je, i když to nikdo používá) 1-fázové konstruktor, který je založen na Smalltalk je new. Když Cocoa přišel do Apple, využití +allocjiž zakořeněné, a nebylo cesty zpět +new, i když ve skutečnosti vybírání vašich NSZoneje zřídkakdy významnou hodnotu.

Takže to není velký 1-fázové / 2-fázové filozofická otázka. V praxi Kakao má konstrukci jednofázové, protože jste vždycky (a vždy by mělo) vyzvat tyto back-to-back v jednom hovoru bez testu na druhé +alloc. Můžete si ji představit jako propracovaný způsob psaní „nový“.

Odpovězeno 04/06/2009 v 02:20
zdroj uživatelem

hlasů
3

Moje zkušenost je, C ++, ale jedna nevýhoda C ++ je jedna fáze inicializace je manipulace dědické / virtuální funkce. V jazyce C ++ nelze volat virtuální funkce v průběhu výstavby nebo zničení (no, můžete, to prostě nebude dělat to, co očekáváte). Dvoufázová init mohl vyřešit (částečně. Z toho, co vím, že by si směrován na správné třídy, avšak init nemusí mít ještě neskončila. Dalo by se ještě dělat věci, s tím) (Jsem stále ve prospěch jedna fáze)

Odpovězeno 04/06/2009 v 02:30
zdroj uživatelem

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