iPhone - Программа получила сигнал: 0 - на устройстве, но не на симуляторе - PullRequest
1 голос
/ 16 января 2010

Я уверен, что это связано с памятью, но я не могу понять, какая переменная вызывает у меня проблемы.

Я высвобождаю все, что выделяю, насколько я могу судить. Кажется, что этот цикл работает нормально, если он выполняется 365 раз, но не 730 (это делает дни в году).

Вот фрагмент кода, который завершается ошибкой ... он никогда не выходит из цикла, когда программа заканчивается на устройстве.

Любая помощь очень ценится. Спасибо!

NSMutableArray * dtArray = [[NSMutableArray alloc] init];

    double frequencyInterval = [Frequency doubleValue];
    int i;

    NSString *newDateString = @"";
    NSString *sqlString = [NSString stringWithFormat:@"insert into ToDoList (TaskId, DueDate, Completed, Notes, Status, CompletedDate, Frequency) values ('%i', \"%@\", '0',\"%@\",'' ,'0', %@);", (int)self.AddTaskId, origDueDateString, NotesField, todoFrequency];
    NSDate *nDate = dueDate;
    NSDateFormatter *f3 = [[NSDateFormatter alloc] init];
    [f3 setDateFormat:@"yyyy-MM-dd"];

    for(i=0; i< 1000; i++) {

         newDate = [newDate addTimeInterval:(frequencyInterval*86400)];
        newDateString = [f3 stringFromDate:newDate];

        if ([endRecurDate compare:newDate] == NSOrderedDescending)
        {
            [dtArray addObject:newDate];
            if (i == 0)
            {
                sql = [sqlString stringByAppendingString:[NSString stringWithFormat:@"insert into ToDoList (TaskId, DueDate, Completed, Notes, Status, CompletedDate, Frequency) values ('%i', \"%@\", '0',\"%@\",'' ,'0', %@)", (int)self.AddTaskId, newDateString, NotesField, todoFrequency]];
            }
            else
            {
                sql = [sql stringByAppendingString:[NSString stringWithFormat:@";insert into ToDoList (TaskId, DueDate, Completed, Notes, Status, CompletedDate, Frequency) values ('%i', \"%@\", '0',\"%@\",'' ,'0', %@)", (int)self.AddTaskId, newDateString, NotesField, todoFrequency]];
            }
            //stringByAppendingString

        }
        else
        {
            break;
        }

    }
    [dtArray release];
    [f3 release];

1 Ответ

1 голос
/ 16 января 2010

Во-первых, вам не нужно инициализировать newDateString до @"";достаточно просто объявить об этом.

Я не заметил каких-либо явных утечек памяти, но вы просматриваете оператор for 1000 раз.Все ваши автоматически выпущенные объекты могут быть не освобождены, пока не закончится весь цикл, поэтому, возможно, вы используете слишком много памяти.Чтобы освободить их во время цикла, сделайте следующее:

for(i=0; i< 1000; i++) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    /* your code here */

    [pool drain];
}

Поиграйте с этим немного;вам, вероятно, не нужно сливать пул каждый раз ваш цикл выполняется, но вы можете построить счетчик и слить пул каждые 25 циклов или около того.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...