Я работаю над обучением Objective-C, и я пытаюсь понять управление памятью. Я довольно хорошо знаком с управлением памятью C, но я пытаюсь понять, как отличается ObjC.Objective C управление памятью для анонимных объектов
Скажем, у меня есть класс с именем Complex
, который используется для проведения комплексных чисел, который имеет метод -(Complex*)add:(Complex*)c;
, который добавляет переданным в комплексном числе к self
(Complex
является изменяемым объектом, скажем).
Так что я могу назвать это таким образом:
Complex *c = [[Complex alloc] withReal: -3.0 andImag: -2.4]; // c = -3.0-2.4i
[c add : [[Complex alloc] withReal: 1.0 andImag: 2.0]]; // now c = -2.0-0.4i
Что происходит с памятью, используемой для временного объекта, созданного в вызове add
? Я предполагаю, что это утечка памяти; это правильный код?
Complex *c = [[Complex alloc] withReal: -3.0 andImag: -2.4]; // c = -3.0-2.4i
Complex *b = [[Complex alloc] withReal: 1.0 andImag: 2.0]; // b = 1+2i
[c add : b]; // now c = -2.0-0.4i
[b release];
Bonus noob question: будет ли сделка с Objective-C 2.0 GC справиться с ситуацией?
Спасибо за советы GC - но это будет какое-то время, прежде чем у меня будет царапина, чтобы начать играть с iPhone;) – decitrig
Уверенная вещь. GC отлично, если вы можете использовать его, хотя это означает, что вам нужно отказаться от поддержки Tiger, и все используемые вами фреймворки должны поддерживать GC. Но со временем это станет более распространенным явлением, и кто знает, возможно, по мере того, как iPhone станет быстрее, они также начнут поддерживать GC. :-) –