Метод класса target c возвращает значение, присвоенное слабым / сильным свойствам

Я сталкиваюсь с некоторой путаницей, связанной со слабыми и сильными свойствами. Для краткости я не буду включать весь код.

Я создал удобный метод класса, который возвращает объект UIView, и реализовал его в категории UIView в качестве альтернативы подклассам.

@implementation UIView (CSMonthView)    

+ (UIView *)monthViewFromDateArray:(NSArray *)arrayOfAllShiftsAndEvents withNibOwner:(id)owner selectedDate:(NSDate *)selectedDate withCompletionHandler:(void(^)(CSCalendarButton *selectedButton))block
{   // .. do some stuff
    // Create an instance of UIView
    UIView *monthView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320.0, 200.0)];

    // Create UIButtons and set the passed down 'owner' value, as the target for an
    // action event.

    // Add UIButton as subviews to monthView....

    return monthView;
}

Я должен отметить, что внутри метода у меня нет ничего, указывающего на monthView.

Теперь внутри реализации 'owner', который является классом с именем CSCalendarViewController, я создаю описанный выше UIView, вызывая метод удобства класса и назначая его свойству UIView с именем _monthView.

@interface CSCalendarViewController : UIViewController 

@property (weak, nonatomic) UIView *monthView;

@end


@implementation CSCalendarViewController


     __weak CSCalendarViewController *capturedSelf = self;
    // Create the current month buttons and populate with values.
    _monthView = [UIView monthViewFromDateArray:_arrayOfAllShiftsAndEvents withNibOwner:self selectedDate:_selectedDate withCompletionHandler:^(CSCalendarButton *selectedButton) {

            capturedSelf.selectedButton = selectedButton;
            [capturedSelf.selectedButton setSelected:YES];
        }

Теперь моя путаница заключается в следующем. Несмотря на то, что я определил свойство monthView как слабое, monthView по-прежнему сохраняет значение возвращаемого UIView.

Если я продолжу и сделаю что-то вроде этого:

    _monthView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 200.0)];

Компилятор выдает предупреждение (как и должно быть), в котором говорится: «Присвоить сохраненный объект слабой переменной».

Почему я не получаю того же сообщения об ошибке, когда я присваиваю «monthView» UIView, который возвращается из метода класса?

У меня нет глубокого понимания, когда дело доходит до управления памятью до ARC, и я думаю, что упускаю что-то очевидное. Благодарю.

Ответы на вопрос(2)

Ваш ответ на вопрос