Должны ли элементы пользовательского интерфейса IOS быть слабыми?

Когда я не использую построитель интерфейсов, я всегда оставляю четкие ссылки на элементы пользовательского интерфейса:

@interface myViewController : UIViewController 

@property (nonatomic, strong) UILabel *folderLabel;

А затем добавьте их так:

[self.view addSubview self.folderLabel];

где инициализатор таким образом:

-(UILabel *)folderLabel{
    if(!_folderLabel) {
        _folderLabel = [[UILabel alloc] init];
        _folderLabel.text = @"foo";
    }
    return _folderLabel
}

Мне сказали, что это почему-то плохо и они всегда должны быть слабыми..

@property (nonatomic, weak) UILabel *folderLabel;

-(UILabel *)folderLabel{
    if(!_folderLabel) {
        UIlabel *folderLabel = [[UILabel alloc] init];
        folderLabel.text = @"foo";
        [self.view addSubview:folderLabel];
        _folderLabel = folderLabel;
    }
    return _folderLabel
}

Является ли сильная ссылка плохой вещью здесь?


person Md1079    schedule 07.10.2015    source источник
comment
Обратите внимание, что правильный ответ, получивший наибольшее количество голосов, а не принятый ответ на этот вопрос   -  person Paulw11    schedule 07.10.2015
comment
этот вопрос относится к IBOulets, это программная настройка элементов пользовательского интерфейса   -  person Md1079    schedule 07.10.2015
comment
ответ с наибольшим количеством голосов, по-видимому, датирован новой информацией о рекомендациях Apple о том, как сохранить их сильными.   -  person Md1079    schedule 07.10.2015
comment
IBOutlet — это просто синтаксическое украшение, позволяющее процессу привязки NIB найти свойство. Неважно, как создается элемент   -  person Paulw11    schedule 07.10.2015


Ответы (1)


Когда вы добавляете подвид в self.view, он сохраняется. Один из работающих шаблонов заключается в том, чтобы выделить подпредставление и сохранить его в локальной переменной, добавить его в self.view, а затем назначить его ivar.

person user3246173    schedule 07.10.2015
comment
верно, но вопрос в том, плохо ли иметь сильную ссылку в заголовочном файле, не причинит ли это вреда, сохранит циклы или утечки памяти? - person Md1079; 07.10.2015
comment
Если вы объявите их сильными, вам нужно обнулить их в viewDidUnload, иначе произойдет утечка. - person user3246173; 07.10.2015
comment
@user3246173 user3246173 Нет, они будут установлены на ноль, когда контроллер представления будет освобожден, что удалит сильную ссылку. - person Abizern; 07.10.2015
comment
да, это правда › ios 6.0 - person user3246173; 07.10.2015
comment
Таким образом, после IOS 6 нет необходимости объявлять их слабыми и добавлять представление в подпредставление в геттерах. - person Md1079; 07.10.2015
comment
В других местах ведутся долгие дискуссии по этому поводу. Я должен был пометить это как дубликат. - person user3246173; 07.10.2015