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;
}
Другие вопросы по тегам