Что точно собирает сборщик "мусора" Objective C? Например, если я пишу программу в Objective C 2.0, и я использую некоторые простые структуры C, мой код должен волноваться о ручном освобождении той памяти?
Что касается динамической памяти, по умолчанию вы предоставлены сами себе. Если вы не выделите память кучи с помощью NSAllocateCollectable
или NSReallocateCollectable
или явно не передадите объект CoreFoundation сборщику мусора через API, например NSMakeCollectable
, GC не имеет представления о вашей памяти, и не справлюсь с этим за вас. И наоборот, когда GC включен, объекты Objective-C, созданные с помощью + alloc
/ -init
, управляются GC, если вы явно не укажете иное с помощью дополнительного вызова API.
http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/GarbageCollection/
Если вы используете malloc ()
для размещения структуры в куче, то я действительно сомневаюсь в этом (на странице руководства об этом ничего не говорится, но возможно, что Apple переписала malloc
для среды выполнения ObjC2). Если вы используете NSAllocateCollectable ()
, тогда да.
Если структура была создана в стеке, то в сборке нет необходимости, так как она будет уничтожена, как только фрейм завершится.