Собирает ли сборщик мусора Objective-C 2.0 структуры C? - PullRequest
9 голосов
/ 19 апреля 2010

Что именно собирает сборщик мусора Objective-C? Например, если я пишу программу на Objective-C 2.0 и использую некоторые простые структуры C, нужно ли моему коду беспокоиться об освобождении этой памяти вручную?

Ответы [ 2 ]

12 голосов
/ 19 апреля 2010

Для кучи памяти вы по умолчанию самостоятельно. Если вы не выделите кучу памяти с помощью NSAllocateCollectable или NSReallocateCollectable или явно передадите объект CoreFoundation сборщику мусора через API, например NSMakeCollectable GC не имеет представления о вашей памяти и не сможет управлять вами. И наоборот, когда GC включен, объекты Objective-C, созданные с помощью +alloc / -init, управляются GC, если вы явно не укажете это с помощью дополнительного вызова API.

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

5 голосов
/ 19 апреля 2010

Если вы используете malloc() для выделения структуры в куче, то я действительно сомневаюсь в этом (страница руководства ничего об этом не упоминает, но возможно Apple переписала malloc для выполнения ObjC2). Если вы используете NSAllocateCollectable(), тогда да.

Если структура была создана в стеке, сбор данных не требуется, поскольку она будет уничтожена при выходе из фрейма.

...