Компилаторът на 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