Вы инициализируете экземпляр (self
), но затем заменяете его словарем.Предполагая, что это именно то, что вы действительно хотите сделать (см. Часть 2), вам нужно освободить старый self
перед назначением нового, а затем вы должны сохранить новый словарь, чтобы ваш метод init
сохранил счет сохранения.Обратите внимание, что этот код возвращает объект NSDictionary
, когда ваш вызывающий код ожидает SigTrkLst
, что почти наверняка является плохой идеей.
- (NSDictionary*) initSigTrkLstWithNiv:(int)pm_SigTrkNiv
SigTrkSig:(int)pm_SigTrkSig
SigResIdt:(int)pm_SigResIdt
SigResVal:(int)pm_SigResVal {
NSArray *objectArray;
NSArray *keyArray;
if (self = [super init]) {
self.SigTrkNiv = [NSNumber numberWithInt:pm_SigTrkNiv];
self.SigTrkSig = [NSNumber numberWithInt:pm_SigTrkSig];
self.SigResIdt = [NSNumber numberWithInt:pm_SigResIdt];
self.SigResVal = [NSNumber numberWithInt:pm_SigResVal];
objectArray = [NSArray arrayWithObjects:
SigTrkNiv,SigTrkSig,SigResIdt,SigResVal, nil];
keyArray = [NSArray arrayWithObjects:
@"SigTrkNiv", @"SigTrkSig", @"SigResIdt", @"SigResVal", nil];
[self release];
self = [NSDictionary dictionaryWithObjects:objectArray forKeys:keyArray];
[self retain];
}
return self;
}
Часть 2: Что это должно сделать ?Как правило, метод -init...
должен возвращать инициализированный экземпляр класса, начиная с выделенного фрагмента памяти.Первая часть вашего -init
метода выглядит правильно, кроме возвращаемого значения.Например, следующий метод -init
является следующим:
- (id)initSigTrkLstWithNiv:(int)pm_SigTrkNiv
SigTrkSig:(int)pm_SigTrkSig
SigResIdt:(int)pm_SigResIdt
SigResVal:(int)pm_SigResVal {
if (self = [super init]) {
self.SigTrkNiv = [NSNumber numberWithInt:pm_SigTrkNiv];
self.SigTrkSig = [NSNumber numberWithInt:pm_SigTrkSig];
self.SigResIdt = [NSNumber numberWithInt:pm_SigResIdt];
self.SigResVal = [NSNumber numberWithInt:pm_SigResVal];
}
return self;
}