ios - Sending removeFromSuperview to self didn't release itself in my scenario -


i have parent uiview , uitextview 1 of subviews. , created button dismiss parent uiview this:

-(void)cancelbuttonpressed:(uibutton *)sender {     [uiview animatewithduration:0.2 delay:0.0 options:uiviewanimationoptioncurveeaseinout animations:^{     self.frame = cgrectzero;     } completion:^(bool finished) {         if (finished) {             [self removefromsuperview];         }     }]; } 

i can tell parent uiview didn't released because if typed text uitextview , dismissed it, when opened uiview again, instead of blank uitextview, same text in again.

i checked leaks tool didn't see leaking. i'm guessing if have kind of retain cycle or what.

update:i have object (which appdelegate) holding uiview's instance: _myview global variable this:

_myview = [[myview alloc] init];  _myview.namelabel.text = _user.screen_name; [_window addsubview:_myview];  [uiview animatewithduration:0.2 delay:0.0 options:uiviewanimationoptioncurveeaseinout animations:^{     _myview.frame = cgrectzero; } completion:nil]; 

but in order avoid retain cycle, should create weak self this: __weak myview *weakself , in animation block this: [weakself removefromsuperview]?

i've tried calling removefromsuperview on view itself, , doesn't result in view being released.

if want release view, go approach uses delegate. way, able call removefromsuperview on view, once animation complete, , set nil. has worked me in past.

so, can add method view class want animate closed, animation. set view controller delegate view, , call method on delegate, completion block of animation.

you can create own protocol this. if keep general enough, , focus on animation callbacks, can reuse protocol in view controllers.


Comments

Popular posts from this blog

c# - Binding a comma separated list to a List<int> in asp.net web api -

Delphi 7 and decode UTF-8 base64 -

html - Is there any way to exclude a single element from the style? (Bootstrap) -