Метод класса 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, и я думаю, что упускаю что-то очевидное. Благодарю.