NSAutoReleaseNoPool() ошибка, плюс странная ошибка
У меня есть следующий код, и у меня возникли некоторые проблемы с ним. Любая помощь будет оценена. Когда я запускаю код, я получаю сообщение об ошибке:
2010-11-11 12:28:15.352 addressBook[25563:a0f] *** __NSAutoreleaseNoPool(): Object 0x100111010 of class NSCFArray autoreleased with no pool in place - just leaking
Я попытался добавить пул автоматического выпуска, но это дало мне гораздо худшие ошибки (которые вообще не позволяли запускать программу), но, возможно, я сделал это неправильно?
Кроме того, по какой-то причине, после того, как он запрашивает ввод имени, он мгновенно запрашивает ввод адреса, прежде чем я смогу что-либо ввести... но он делает это только при первом добавляемом контакте. Я понятия не имею, как это могло произойти..
how many address would you like to input?
Running…
3
2010-11-11 12:28:15.352 addressBook[25563:a0f] *** __NSAutoreleaseNoPool(): Object 0x100111010 of class NSCFArray autoreleased with no pool in place - just leaking
Please input the name of contact
Please input the address of contact
john doe
Please input the birthday of contact
500 E. Main
и так далее, и тому подобное.
printf("how many address would you like to input?\n");
int numAddresses;
scanf("%i", &numAddresses);
if(numAddresses<1) return 0;
NSMutableArray * arrayOfBooks = [NSMutableArray array];
for (int i = 0; i < numAddresses; ++i) {
book * f = [[book alloc] init];
[arrayOfBooks addObject:f];
[f release];
}
unsigned count = [arrayOfBooks count];
while (count--) {
id object = [arrayOfBooks objectAtIndex:count];
printf("Please input the name of contact\n");
char inputString1[50];
if(fgets(inputString1, sizeof inputString1, stdin)){
[object setName: inputString1];
}
printf("Please input the address of contact\n");
char inputString2[50];
fgets(inputString2, sizeof inputString2, stdin);
[object setAddress: inputString2];
printf("Please input the birthday of contact \n");
char inputString3[50];
fgets(inputString3, sizeof inputString3, stdin);
[object setBirthday: inputString3];
printf("Please input the phone number of contact \n");
char inputString4[50];
fgets(inputString4, sizeof inputString4, stdin);
[object setPhoneNumber: inputString4];
[object print];
}
return 0;
Заранее спасибо.
1 ответ
Если вы используете Objective-C, вы должны обернуть всю основную функцию пулом автоматического выпуска. Вы используете это так:
int main(int argc, char** argv) {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
// real code here
[pool drain];
return 0;
}