Эта проблема обычно возникает, когда вы перепустили объект, и пространство было повторно использовано для чего-то другого (CALayer в вашем случае). Я не вижу конкретной проблемы, которая может быть причиной этого, но у вас есть определенная ошибка:
Person *firstPerson = [[Person alloc] initWithfirstName:@"Zen" lastName:@"Yong" email:@"" phoneNumber:@""];
person = firstPerson;
NSMutableArray *array = [[NSMutableArray alloc]initWithObjects:person, nil];
personArray = array;
[array release];
Это создает массив и сразу же освобождает его. Вполне вероятно, что массив был освобожден. Объект person в нем, однако, не был освобожден, поэтому, если вы не сделаете это позже, он просочится. Вы, вероятно, хотели что-то более похожее на:
Person *firstPerson = [[Person alloc] initWithfirstName:@"Zen" lastName:@"Yong" email:@"" phoneNumber:@""];
NSMutableArray *array = [[NSMutableArray alloc] initWithObject: firstPerson];
[firstPerson release];
Затем вам нужно сохранить массив где-нибудь, поэтому, если personArray является переменной экземпляра, вы можете просто сделать
personArray = array; // personArray must be nil beforehand to stop leaks.
или, если это свойство (лучше):
[self setPersonArray: array]; // or equivalently self.personArray = array;
[array release];
В последнем несвязанном примечании считается, что лучше не использовать свойства в методах -init
или -dealloc
. Ваш -init
должен выглядеть примерно так:
if(self = [super init])
{
firstName = [thisFirstName copy];
lastName = [thisLastName copy];
email = [thisEmail copy];
phoneNumber = [thisPhoneNumber copy];
}
И не забудьте выпустить все в -dealloc
.