Компилятор ARC автоматически определяет, следует ли сохранять или назначать в переопределенном классе в зависимости от атрибутов свойства?

Я недостаточно хорошо знаю ассемблер, чтобы понять такой сложный код, как ассемблер для всего проекта, но я заметил, что если я добавляю атрибут 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 автоматически определяет, следует ли сохранять или назначать в переопределенном классе в зависимости от атрибутов свойства?


person DanSkeel    schedule 02.11.2011    source источник


Ответы (1)


Короче говоря, да. Поскольку вы установили свойство как strong, оно будет сохранено объектом. Если вы объявите свойство как weak, подразумеваемой (синтезированной) переменной будет __weak NSSet *mySet, и она не сохранит объект, но будет автоматически обнуляемым указателем.

person Alexsander Akers    schedule 02.11.2011
comment
Спасибо. Итак, компилятор определяет это в зависимости от подразумеваемого iVar? Итак, я устанавливаю свойство, оно подразумевает ivar, а затем компилятор решает, как хранить в нем значение? Мне от этого не намного лучше, но, может быть, я лучше это пойму. - person DanSkeel; 02.11.2011
comment
Да, это правильно. strong подразумевает __strong, что совпадает с retain в MRC. (По умолчанию это assign или unsafe_unretained, оба из которых подразумевают __unsafe_unretained, что совпадает с assign в MRC). - person Alexsander Akers; 02.11.2011