Освобождает ли автоматический подсчет ссылок объект, если я установил указатель на ноль? - PullRequest
4 голосов
/ 27 ноября 2011

Освобождает ли автоматический подсчет ссылок объект, если я установил указатель на ноль или назначил указатель на другой объект?

Например, сделав что-то подобное:

//in .h file

@interface CustomView : UIView
{
   UIView *currentView;
}


// in .m file:

-(void)createView1
{
   currentView = [[UIView alloc] init];
   [self addSubview:currentView];
}

-(void)createView2
{
   [currentView removeFromSuperview];

   // does the former view get released by arc
   // or does this leak?
   currentView = [[UIView alloc] init];
   [self addSubview:currentView];
}

Если этоутечки кода, как бы я правильно объявил * currentView?Или как сделать так, чтобы ARC «выпустил» currentView?спасибо!

Ответы [ 2 ]

6 голосов
/ 27 ноября 2011

С ARC вам не нужно думать о release/retain.

Поскольку ваша переменная будет неявно определена как strong, нет необходимости устанавливать ее на NULL - она ​​будет освобождена до того, как будет присвоена.

Лично я предпочитаю объявлять свойства:

@property (strong, nonatomic) UIView *currentView;
3 голосов
/ 27 ноября 2011

После выполнения [currentView removeFromSuperview], вы должны позвонить currentView = nil, и ARC сделает это, выпустив магию. Затем вы можете переназначить currentView с этим новым UIView там.

...