Répondre

12

Pour la mémoire de tas, vous êtes seul par défaut. Sauf si vous allouez de la mémoire de tas avec NSAllocateCollectable ou NSReallocateCollectable, ou si vous transférez explicitement un objet CoreFoundation au garbage collector via une API comme NSMakeCollectable, le GC n'a aucune idée de votre mémoire et ne la gèrera pas pour vous. Inversement, lorsque GC est activé, les objets Objective-C créés avec +alloc/-init sont gérés par GC, à moins que vous ne le disiez explicitement avec un appel d'API complémentaire.

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/GarbageCollection/

+2

+1 Le Guide de programmation de la collecte des ordures est l'un des textes techniques les plus fascinants que j'ai jamais lus. –

+0

NSAllocateCollectable est exactement ce que je cherchais, merci! –

5

Si vous utilisez malloc() d'allouer une structure sur le tas, alors je vraiment doute (la page de manuel ne mentionne rien à ce sujet, mais il est possible que Apple a récrit malloc pour l'exécution ObjC2). Si vous utilisez NSAllocateCollectable(), alors oui.

Si la structure a été créée sur la pile, il n'y a pas besoin de collecte, car elle sera détruite dès la sortie de la trame.

+0

+1 Pour mentionner ce qui se passe à Structs alloué sur la pile. –

Questions connexes