2013-10-02 3 views
1

У меня есть UIView, что когда я инициализировать уже сохранить кол 2, и я не понимаю, почему, в результате чего я не могу удалить его с removefromsuperviewСохранил графа и removeFromSuperview

ViewController.h

@property (nonatomic, retain)FinalAlgView * drawView; 

ViewController.m

self.drawView =[[FinalAlgView alloc]init]; 

NSLog(@"the retain count 1 of drawView is %d", [self.drawView retainCount]); 
//the retain count 1 of drawView is 2 

[self.bookReader addSubview:self.drawView]; 

NSLog(@"the retain count 2 of drawView is %d", [self.drawView retainCount]); 
//the retain count 2 of drawView is 3 

[self.drawView release]; 

NSLog(@"the retain count 3 of drawView is %d", [self.drawView retainCount]); 
//the retain count 3 of drawView is 2 

[UIView animateWithDuration:0.2 
       animations:^{self.drawView.alpha = 0.0;} 
       completion:^(BOOL finished){ [self.drawView removeFromSuperview]; 
       }]; 
//do not remove 

Я не использую ARC

+0

Вы используете ARC? –

+0

На ваш вопрос только один ответ: http://stackoverflow.com/questions/4636146/when-to-use-retaincount/4636477#4636477 – rckoenes

ответ

4

Вы canno t рассчитывается на retainCount, вы получите непонятный результат, и лучше не используйте его вообще.

От Apple:

... это очень маловероятно, что вы можете получить полезную информацию из этого метода.

0

Как указано null, вы не можете положиться на retainCount. Предполагая, что вы используете ARC, ваш код на самом деле компиляции на что-то вроде этого:

FinalAlgView *dv = [[FinalAlgView alloc] init]; // Starts with retainCount of 1 
self.drawView = dv; // Increments the retainCount 

NSLog(@"the retain count 1 of drawView is %d", [self.drawView retainCount]); 
//the retain count 1 of drawView is 2 

... 
// do not remove 
... 
[dv release]; 

Если вы не используете ARC, то вам необходимо изменить первую строку кода следующим образом:

self.drawView =[[[FinalAlgView alloc]init]autorelease]; 

retainCount по-прежнему будет начинаться с 2 до тех пор, пока пул авторефератов не будет слит в конце runloop.

+0

также использовался addSubview, который увеличивает его до 3, затем как его снизить до использовать removeFromSuperView? –

+0

Когда вы вызываете 'removeFromSuperview', удержание сохраняется. –

+0

, но removeFrmSuperview не удаляет вид –

Смежные вопросы