В ваших методах получения вы возвращаете автоматически освобожденный объект, который, возможно, никогда не был выделен для начала. Другими словами, вы только распределяете объекты в своем установщике. Если вы хотите, чтобы ваши объекты возвращались автоматически, вы должны сначала выделить их, а затем вернуть их автоматически.
Возможно, вам лучше создать свойства для каждого ивара, а классы сохранят и выпустят их. Вам по-прежнему нужно распределять их, если они не были распределены, что вы можете переопределить для метода получения. Что-то вроде этого.
-(NSString *)effect {
if (!effect) {
effect = [[NSString alloc] init];
}
return effect;
в заголовке у вас будет
NSString *effect;
и затем свойство
@property(nonatomic, retain) NSString *effect;
тогда в реализации вы бы синтезировали
@synthesize effect;
и отпустите в своем - (void) dealloc
[effect release];
Таким образом, после того, как вы создадите класс Card, вы можете назвать такие вещи, как
card.effect = @"Whatever goes in the effect property";
//assuming card is a Card object
Надеюсь, это поможет.