Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone-程序接收到信号:0-在设备上,但不在模拟器上_Iphone_Cocoa Touch_Xcode_Memory Management - Fatal编程技术网

iPhone-程序接收到信号:0-在设备上,但不在模拟器上

iPhone-程序接收到信号:0-在设备上,但不在模拟器上,iphone,cocoa-touch,xcode,memory-management,Iphone,Cocoa Touch,Xcode,Memory Management,我确信这与记忆有关,但我似乎不知道是什么变量导致了我的问题 我会尽我所能释放我分配的一切。如果这个循环运行365次,而不是730次(一年中的运行天数),那么它似乎可以正常工作 下面是失败的代码片段。。当程序在设备上结束时,它永远不会退出循环 非常感谢您的帮助。谢谢 NSMutableArray*dtArray=[[NSMutableArray alloc]init] double frequencyInterval = [Frequency doubleValue]; int i

我确信这与记忆有关,但我似乎不知道是什么变量导致了我的问题

我会尽我所能释放我分配的一切。如果这个循环运行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];
double Frequency interval=[Frequency doubleValue];
int i;
NSString*newDateString=@;
NSString*sqlString=[NSString stringWithFormat:@“插入到ToDoList(任务ID、DueDate、已完成、备注、状态、已完成日期、频率)值(“%i”、\“%@\”、“0”、\“%@\”、“”、'0'、%@);“,(int)self.AddTaskId、origDueDateString、NotesField、todoFrequency];
NSDate*nDate=dueDate;
NSDateFormatter*f3=[[NSDateFormatter alloc]init];
[f3 setDateFormat:@“yyyy-MM-dd”];
对于(i=0;i<1000;i++){
newDate=[newDate addTimeInterval:(frequencyInterval*86400)];
newDateString=[f3 stringFromDate:newDate];
if([endRecurDate比较:newDate]==取消下移)
{
[dtArray addObject:newDate];
如果(i==0)
{
sql=[sqlString stringByAppendingString:[NSString stringWithFormat:@“插入到ToDoList(任务ID、DueDate、Completed、Notes、状态、CompletedDate、频率)值(“%i”、“%@\”、“0”、“%@\”、“(int)self.AddTaskId、newDateString、NotesField、todoFrequency]”);
}
其他的
{
sql=[sql stringByAppendingString:[NSString stringWithFormat:@];插入到ToDoList(TaskId、DueDate、Completed、Notes、Status、CompletedDate、Frequency)值(“%i”、\“%@\”、“0”、\“%@\”、“(int)self.AddTaskId、newDateString、NotesField、ToDofResquency)];
}
//stringByAppendingString
}
其他的
{
打破
}
}
[dtArray release];
[f3释放];

首先,您不需要将
newDateString
初始化为
@“
;简单地说就够了

我没有注意到任何明显的内存泄漏,但是您在
语句中循环了1000次。在完成整个循环之前,所有自动释放的对象可能不会被释放,因此这可能就是您使用太多内存的原因。要在循环期间释放它们,请执行以下操作:

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

    /* your code here */

    [pool drain];
}
(i=0;i<1000;i++)的
{
NSAutoreleasePool*池=[[NSAutoreleasePool alloc]init];
/*你的代码在这里*/
[泳池排水沟];
}

玩一下这个;您可能不需要每次执行循环时都清空池,但您可以构建一个计数器,每隔25个循环左右清空池。

首先,您不需要将
newDateString
初始化为
@
;简单地说就够了

我没有注意到任何明显的内存泄漏,但是您在
语句中循环了1000次。在完成整个循环之前,所有自动释放的对象可能不会被释放,因此这可能就是您使用太多内存的原因。要在循环期间释放它们,请执行以下操作:

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

    /* your code here */

    [pool drain];
}
(i=0;i<1000;i++)的
{
NSAutoreleasePool*池=[[NSAutoreleasePool alloc]init];
/*你的代码在这里*/
[泳池排水沟];
}

玩一下这个;您可能不需要每次执行循环时都排空池,但您可以构建一个计数器并每隔25个循环左右排空池。

也许我没有正确地处理这个问题,但我没有在此循环中自动释放任何对象。您没有,但您调用的许多方法都返回自动释放的对象。每次调用stringByAppendingString、stringFromDate等时,返回的对象都会自动删除。根据我的统计,循环中有六个对象,根据字符串的长度,这几乎肯定是问题所在。也许我没有正确地处理这个问题,但我没有自动删除循环中的任何对象。你没有,但是你调用的许多方法都返回自动删除的对象。每次调用stringByAppendingString、stringFromDate等时,返回的对象都会自动删除。据我统计,循环中有六个对象,根据字符串的长度,这几乎肯定是问题所在。