2014-05-22 1 views
-1

안녕하세요. Ical에서 이벤트를 추가하려고합니다. Ical에 추가 할 이벤트가 64 개 있습니다. 먼저 이벤트를 제거한 다음 추가합니다. 여기 내 코드입니다 :IOS가 Ical에서 이벤트를 추가 할 때 메모리 문제가 발생합니다.

-(void)deleteAllEvents { 
    @autoreleasepool { 
     // Take start date before a year 
     NSDate *today = [[NSDate alloc] init]; 
     NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
     NSDateComponents *offsetComponents = [[NSDateComponents alloc] init]; 
     [offsetComponents setYear:-1]; // note that I'm setting it to -1 
     NSDate *startDate = [gregorian dateByAddingComponents:offsetComponents toDate:today options:0]; 
     // Take end date after a year 
     int seconds_in_year = 60*60*24*365; 
     NSDate* currentFinish = [NSDate dateWithTimeInterval:seconds_in_year sinceDate:[NSDate new]]; 
     NSArray *calendarArray = [NSArray arrayWithObject:calendar]; 
     NSPredicate *predicate = [calStore predicateForEventsWithStartDate:startDate endDate:currentFinish calendars:calendarArray]; 

     [calStore enumerateEventsMatchingPredicate:predicate usingBlock:^(EKEvent *event, BOOL *stop) { 
      NSLog(@"%@",event.title); 
      [calStore removeEvent:event span:EKSpanThisEvent error:nil]; 
     }]; 
    } 
} 
-(BOOL)addEvents:(NSArray *)arrayOfEvents { 
    @autoreleasepool { 
     for (int iAddtoCal = kZero; iAddtoCal < arrayOfEvents.count; iAddtoCal++) { 
      UserScheduleEvents *eventIcal = [arrayOfEvents objectAtIndex:iAddtoCal]; 
      EKEvent *event = [EKEvent eventWithEventStore:calStore]; 
      event.title = eventIcal.messge; 
      event.startDate = eventIcal.startTime; 
      event.endDate = [eventIcal.startTime dateByAddingTimeInterval:150*60]; 
      event.notes = [NSString stringWithFormat:@"%@:",eventIcal.ids]; 
      [event setCalendar:calendar]; 
      NSError *err = nil; 

      [calStore saveEvent:event span:EKSpanThisEvent commit:YES error:&err]; 
      NSString *savedEventId = event.eventIdentifier; //this is so you can access this event later 
      NSLog(@"Event Id = %@",savedEventId); 
      sleep(kAnim_03); 
     } 
    } 
    return true; 
} 
+0

"Gives Memory Issue"보다 자세한 정보가 필요합니다. 정확한 문제는 무엇입니까? 아마도 예외 로그일까요? for 루프 내부에서 자동 복구 풀을 움직여 볼 수도 있습니다. –

답변

1

나는 내부의 @autorelease 풀을 움직일 것입니다 범위에 대한 :

for (int iAddtoCal = kZero; iAddtoCal < arrayOfEvents.count; iAddtoCal++) { 
    @autoreleasepool { 

     UserScheduleEvents *eventIcal = [arrayOfEvents objectAtIndex:iAddtoCal]; 
     ... 
    } 
} 

그렇지 않으면 당신은 단지 전체 루프가 완료된 후 풀 (해제 메모리) 배수됩니다, 그것은 꽤 쓸모가 없다.

+0

내가 이것을 시도하게 해주세요. .. 이것이 효과가 있기를 바란다. – Siten