Я изо всех сил пытаюсь понять, что не так с этим кодом. Думаю, я не совсем понимаю количество ссылок. Я всегда полагался на ARC в версии iOS. Но я должен быстро обновить код, написанный с 4.0 до 7.0. Запуск анализа показывает следующую ошибку:
Метод возвращает объект Objective-C с увеличенным счетчиком сохранения +0 и счетчиком ссылок.
Теперь объект имеет счетчик удержания +1 в строке :[self changeSelectionTo:[[gregorian dateFromComponents:currentComps] retain]];
.
Утечка объекта: выделенный объект не упоминается позже в этом пути выполнения и имеет счетчик удержания +1 в [currentPageView selectDate:selected];
Я новичок в IOS и не могу распознать проблему в этом коде. Ваша помощь очень ценится.
@property (nonatomic, retain) id<CalendarViewDelegate> delegate;
@property (nonatomic, readonly) NSDate *selected;
- (id)initWithDelegate:(id<CalendarViewDelegate>)d {
if (self = [super initWithFrame:CGRectMake(0, 0, 320, 480)]) {
delegate = [d retain];
self.backgroundColor = [UIColor whiteColor];
gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
[self createUIControls];
NSDateComponents *currentComps =
[gregorian components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];
currentDay = currentComps.day;
currentMonth = currentComps.month;
currentYear = currentComps.year;
showingMonth = currentComps.month;
showingYear = currentComps.year;
[self updateLastAndNextMonthAttributes];
[self updateMonthHeader];
currentPageView = [[CalendarPageView alloc] initWithMonth:showingMonth
andYear:showingYear delegate:self];
currentPageView.frame = CGRectMake(0, 0, currentPageView.bounds.size.width, currentPageView.bounds.size.height);
currentPageView.delegate = self;
[pagesView addSubview:currentPageView];
// the memory leak issue seems to be in this area
[self changeSelectionTo:[[gregorian dateFromComponents:currentComps] retain]];
[currentPageView selectDate:selected];
highlighted = nil;