В чем разница между сильной и слабой кнопкой в Objective c?
При объявлении кнопки всегда есть два параметра в качестве свойств кнопки: сильный и слабый. В чем разница между ними? Кроме того, что это неатомично? Например:
@property (weak, nonatomic) IBOutlet UIButton *MyButton;
2 ответа
Пожалуйста прочтите это:
Должен ли IBOutlets быть сильным или слабым в ARC?
С практической точки зрения, в iOS и OS X выходы должны быть определены как объявленные свойства. Обычно выходы должны быть слабыми, за исключением тех, которые принадлежат Владельцу файла, объектам верхнего уровня в файле пера (или, в iOS, сцене раскадровки), которые должны быть сильными. Поэтому созданные вами розетки по умолчанию обычно будут слабыми, потому что:
Выходы, которые вы создаете, например, для подпредставлений представления контроллера представления или окна контроллера окна, являются произвольными ссылками между объектами, которые не подразумевают владение.
Сильные выходы часто определяются классами каркаса (например, выходом представления UIViewController или выходом окна NSWindowController).
@property (weak) IBOutlet MyView *viewContainerSubview; @property (strong) IBOutlet MyOtherClass *topLevelObject;
Получил это все от http://clickflickboom.com/strong-vs-weak/...
У вас есть выбор между (сильным) и (слабым) при определении свойства. В этом посте я объясню разницу между ними.
сильный
@property (strong) NSString *myString;
Это стандартное состояние указателя, хотя я все еще хотел бы явно указать сильное для ясности. Сильный указатель будет сохраняться до тех пор, пока остается класс, в котором он был размещен.
слабый
@property (weak) NSString *myString;
Слабая ссылка означает, что указатель не имеет владельца, поэтому он будет освобожден, как только он больше не нужен (то есть на него больше ничего не указывает).
Чаще всего вы используете слабый для объектов IBOutlets, таких как объекты UITextFIeld, UILabels и UIButton. Вот пример:
В этом случае я создаю IBOutlet для кнопки (theButton) в моем представлении в контроллере. Объект theButton принадлежит моему представлению, а не моему контроллеру, поэтому в этом случае слабый атрибут имеет больше смысла, чем сильный. Фактически, как правило, IBOutlets всегда должен быть слабым.