Подтвердить что ты не робот

Присвоение сохраненного объекта слабой собственности; объект будет выпущен после присвоения

Я использовал некоторый исходный код:

 KGModalContainerView *containerView = 
     self.containerView = 
         [[KGModalContainerView alloc] initWithFrame:containerViewRect];

Он дает мне: Assigning retained object to weak property; object will be released after assignment

изменить

@interface KGModal()
  @property (strong, nonatomic) UIWindow *window;
  @property (weak, nonatomic) KGModalViewController *viewController;
  @property (weak, nonatomic) KGModalContainerView *containerView;
  @property (weak, nonatomic) UIView *contentView;
@end

KGModalContainerView *containerView = 
    self.containerView = 
        [[KGModalContainerView alloc] initWithFrame:containerViewRect];
containerView.modalBackgroundColor = self.modalBackgroundColor;
containerView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin |
                                 UIViewAutoresizingFlexibleRightMargin |
                                 UIViewAutoresizingFlexibleTopMargin |
                                 UIViewAutoresizingFlexibleBottomMargin;
containerView.layer.rasterizationScale = [[UIScreen mainScreen] scale];
contentView.frame = (CGRect){padding, padding, contentView.bounds.size};
[containerView addSubview:contentView];
[viewController.view addSubview:containerView];
4b9b3361

Ответ 1

Я предполагаю, что ваше свойство containerView объявлено атрибутом weak. Если вы хотите иметь атрибут weak для свойства, которое кто-то должен его уже сохранить. Вот пример:

@property (nonatomic, weak) KGModalContainerView *containerView;
...
-(void)viewDidLoad {
    [super viewDidLoad];
    KGModalContainerView *myContainerView = [[KGModalContainerView alloc] initWithFrame:containerViewRect]; // This is a strong reference to that view
    [self.view addSubview:myContainerView]; //Here self.view retains myContainerView
    self.containerView = myContainerView; // Now self.containerView has weak reference to that view, but if your self.view removes this view, self.containerView will automatically go to nil.

 // In the end ARC will release myContainerView, but it retained by self.view and weak referenced by self.containerView
}

Ответ 2

Мои 2 цента как новичок в Objective C:

Правая сторона строки, которая дает предупреждение,

[[KGModalContainerView alloc] initWithFrame:containerViewRect]

создает объект в куче, и в этот момент этот объект не ссылается никаким указателем. Затем этот объект присваивается self.containerView. Поскольку self.myContainerView слаб, присваивание не увеличивает счетчик ссылок объекта, созданного с правой стороны. Поэтому, когда назначение выполнено, счетчик ссылок объекта по-прежнему равен 0, и, следовательно, ARC немедленно освобождает объект.