#objective-c #setter #automatic-ref-counting
#objective-c #установщик #автоматический подсчет ссылок
Вопрос:
Я недостаточно хорошо знаю ассемблер, чтобы понимать такой сложный код, как Assembly для всего проекта, но я заметил, что если я добавляю strong
атрибут к свойству, _objc_storeStrong
вызов отображается рядом со строкой в моем установщике, где я правильно меняю свой;
@interface ClassName : NSObject
@property (strong, nonatomic) NSSet *mySet;
@end
@implementation ClassName
@synthesize mySet;
-(void)setMySet:(NSSet *)newMySet
{
mySet = newMySet;
//do stuff
}
@end
Итак? я прав? Автоматически ли компилятор ARC определяет, сохранять или назначать в переопределенном классе в зависимости от атрибутов свойства?
Ответ №1:
Короче говоря, да. Поскольку вы задали свойство как strong
, оно будет сохранено объектом. Если вы объявите свойство as weak
, подразумеваемая (синтезированная) переменная is __weak NSSet *mySet
и это не сохранит объект, но это будет указатель с автоматическим обнулением.
Комментарии:
1. Спасибо. Итак, компилятор определяет это в зависимости от подразумеваемого iVar? Итак, я настраиваю свойство, оно подразумевает ivar, а затем компилятор решает, как сохранить в нем значение? Для меня это не намного лучше, но, может быть, я пойму это лучше.
2. Да, это правильно.
strong
подразумевает__strong
, что это то жеretain
самое, что и в MRC. (Значение по умолчанию равноassign
илиunsafe_unretained
, оба из которых подразумевают__unsafe_unretained
, что является тем же,assign
что и в MRC).