Должны ли быть освобождены переменные экземпляра без указателя в dealloc?

Должен ли я вызывать release в dealloc методе класса для переменных, не являющихся указателями?

e.g.

@interface myClass : NSObject {

    BOOL isDirty; // do i have to release this?
    NSInteger hoursSinceStart; // and this?

    NSDate *myDate; // i will release the pointer in dealloc
}

@property (assign, nonatomic) NSInteger hoursSinceStart; // property to release?

@property (assign, nonatomic) BOOL isDirty; // property to release?
@end

person gonzalesblanco    schedule 15.06.2011    source источник
comment
нет, эти значения останутся в стеке и появятся, когда ваша программа вызовет метод dealloc.   -  person fatih    schedule 15.06.2011
comment
@faith Я сомневаюсь, что dealloc имеет какое-либо отношение к переменным стека?   -  person Tatvamasi    schedule 16.06.2011


Ответы (3)


Две вещи:

  1. Вам нужно только сохранить и освободить объекты. BOOL и NSInteger не являются объектами, это примитивы.

  2. Обычно вы не должны вызывать release для какого-либо assign свойства, потому что вы его не сохранили - и, конечно, assign - единственный тип, который имеет смысл для примитивов, таких как NSIntegers или BOOL, поскольку вы не можете сохранить их в первую очередь.

person Chuck    schedule 15.06.2011

Вам не нужно выпускать BOOL или NSInteger. Как оказалось, NSInteger - это просто определение типа для int (через нужно ли выпускать NSInteger в iphone?)

person Chazbot    schedule 15.06.2011

Все вы выпустите объекты, расширяющие NSObjects (или реализующие протокол NSObject).
прочтите http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html для лучшего понимания управления памятью.

person Tatvamasi    schedule 15.06.2011
comment
Ну, технически это любой объект, который соответствует NSObject протоколу, и по соглашению (а не языку), это любой класс. - person Jonathan Grynspan; 15.06.2011
comment
Это не упоминается в вопросе, но не забудьте free() вручную malloc() занять память и в -dealloc. На самом деле, любая динамически выделяемая память. - person Wilbur Vandrsmith; 16.06.2011
comment
@Wilbur Vandrsmith C Правила, всегда :) - person Tatvamasi; 16.06.2011