V souvislosti se sérií článků o vývoji mobilních aplikací v Xamarinu zde na Rootu bych rád upozornil na nesmyslné tvrzení o správě paměti v iOS.
K diskusi o tom, odkdy má ObjC počítání referencí a autorelease pool, se nebudu vracet, k vygooglování této informace není zapotřebí zvláštní inteligence, stačí umět číst.
Není samozřejmě pravda, že GC (touto zkratkou v tomto článku myslím garbage collector à la .NET) je lepší nebo efektivnější než počítání referencí. Právě naopak, i když pochopitelně do značné míry záleží na implementaci. V iOS (a obecně v Cocoa) se vytváří autorelease pool pro každý průchod smyčky UI, tedy nějak následovně:
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
@try {
// loop
} @catch(NSException* exception) {
// terminate
}
[pool drain];
GC v Cocoa (verze pro OS X) je konzervativní (s ukazateli by byl nějaký jiný použitelný jen s obtížemi) a tudíž metoda drain vyvolá uvolnění objektů, na něž neexistuje reference. Bez GC (a tedy i na iOS) prostě zruší autorelease pool smyčky a všem objektům v poolu sníží čítač referencí.
Xamarin by měl fungovat, pokud jsou jeho tvůrci chytří, v podstatě stejně. Je hezké, že tam má každý objekt standardně IDisposable, což z pohledu (formální) pragmatiky odpovídá lokálnímu zušení objektu v ObjC při použití ARC, ovšem opravdu efektivní je likvidace alespoň první generace objektů na haldě, na něž neexistuje reference, po každém průběhu smyčkou UI.
Pro zajímavost uveďme, že WinRT funguje v tomto ohledu přesně jako Cocoa ve spojení s ARC.
Trochu od temy ale s Xamarinom. Mal som neprijemnu skusenosti, co sa tyka pamate a objektov, pri Xamarin na Androide - s vacsou app je problem zkrotit JNI Referencie, a potom mozu dosihanut max (2000 na emulatore, 52000 na device) a clovek co o JNI nevie moze hladat chybu... app "nahodne" crashuje, ani to nehodi casto vynimku do c#, proste crashne. Jedine riesenie je pouzivat IDposable a using. Ze by to Mono GC nejak casom uvolnoval som si nevsimol, ale nerypal som sa v tom moc.
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 36 203×
Přečteno 25 362×
Přečteno 23 796×
Přečteno 20 178×
Přečteno 17 875×