Мой английский не очень хорошо, я пытаюсь четко описать проблему. Я знаю, что @property
и @synthesize
предназначены только для получения методов получения и сеттера. Таким образом, мы можем использовать имущество по self.x
и _x
. И self.x
- это просто метод setter и getter.Какая польза от @property (strong) в OC?
Результат @property(strong)
это получить методы следующим образом: Все в АРК:
@property (nonatomic, strong) NSString *name;
- (NSString *)name {
return _name;
}
- (void)setName:(NSString *)name {
if (_name != name) {
_name = name;
}
}
Итак, мой вопрос в том, что если использование @property(strong)
просто получить методы, мы можем использовать следующие ,
- (void)setName:(NSString *)name {
if (_name != name) {
__weak _name = name;
}
}
Когда мы используем self.name
setName:
установить вызов метода, и мы получаем слабое имя, даже мы используем сильный прежде, это выглядит правильно. Но есть и другие примеры.
@protocol TestDelegate <NSObject>
@end
@interface Test : UIView
@property (nonatomic, weak) id<TestDelegate> delegate;
- (instancetype)initWithDelegate:(id<TestDelegate>)delegate;
@end
- (instancetype)initWithDelegate:(id<TestDelegate>)delegate {
self = [super init];
if (self) {
_delegate = delegate;
}
return self;
}
Использование в ViewController, все dealloc, не рецикл. Затем мы используем
@property (nonatomic, strong) id<TestDelegate> delegate;
- (instancetype)initWithDelegate:(id<TestDelegate>)delegate {
self = [super init];
if (self) {
self.delegate = delegate;
}
return self;
}
- (void)setDelegate:(id<TestDelegate>)delegate {
__weak _delegate = delegate;
}
Все dealloc, не перерабатывают. Поскольку мы используем self.delegate
в методе init, вызов метода setDelegate:
, и мы получаем слабый делегат, даже раньше мы использовали сильные. Затем мы используем _delegate = delegate
, он будет перерабатывать !!! Меня озадачивает, что мы используем weak
и _delegate = delegate
, он работает хорошо, но мы используем strong
, _delegate = delegate
и пользовательский метод слабых меток, он перерабатывается.
Спасибо!
ну, спасибо, я сказал это! Я не хочу получить ответ, что делегаты должны должны использовать слабый! Я имею в виду, как слабые понимают, если просто получают как геттер, так и сеттер, а слабый действуют в сеттер.Почему мы используем '' '_delegate = delegate''' хорошо! – swordjoy