美文网首页
控制器无法释放的原因

控制器无法释放的原因

作者: 野咪咕 | 来源:发表于2022-01-29 14:31 被阅读0次

    1,在block 方法里面直接写代理 举例:

    self.categoryView.selectedItemHelper = ^(NSUInteger index) {

    //直接写代理

     if (self.delegate && [self.delegate respondsToSelector:@selector(segmentedPageViewControllerDidEndDeceleratingWithPageIndex:)]) {

            [self.delegate segmentedPageViewControllerDidEndDeceleratingWithPageIndex:index];

        }


        };

    //解决办法 另写个方法在写代理方法

    self.categoryView.selectedItemHelper = ^(NSUInteger index) {

            //代理方法

            [myselfdidEndDeceleratingWithPageIndex:index];

        };


    2,封装的view 传控制器 举例:

    //注意点:如果searchView 里面的子view,或者其他view 也传popToVC了,例如:self.saomiaoView.popToVC=self.popToVC; 也要释放不然控制无法释放


    @interface LLJFound_searchView : UIView

    @property (nonatomic,strong)UIViewController * popToVC;

    @end

    //这样然后直接不管了,控制器得不到释放

    - (void)viewDidLoad {

        [super viewDidLoad];

     self.searchView.popToVC = self;

    }

    解决办法

    1,@property (nonatomic,weak)UIViewController * popToVC;//用weak 修饰vc,不用担心不能释放

    2,不建议,还得手动至为nil

    -(void)viewWillAppear:(BOOL)animated

    {

        

         [super viewWillAppear:animated];

         self.searchView.popToVC = self;

         [self.navigationController setNavigationBarHidden:YES animated:animated];

         

    }

    -(void)viewWillDisappear:(BOOL)animated

    {

        [super viewWillDisappear:animated]

    //如果searchView 里面的子view,或者其他view 也传popToVC了,例如:self.saomiaoView.popToVC=self.popToVC; 也要释放不然控制无法释放

        self.searchView.popToVC = nil; //必须释放vc 不然控制无法释放

       self.searchView.saomiaoView = nil;//必须释放vc 不然控制无法释放

        [self.navigationController setNavigationBarHidden:NO animated:animated];

       

    }


    3,block  内部打印 DLog(%@,"不能释放");


    #ifdef DEBUG

    #define DLog(...) NSLog(@"%s(%p) \n\t%@", __PRETTY_FUNCTION__, self, [NSString stringWithFormat:__VA_ARGS__])

    #else

    #define DLog(...)

    #endif


    因为 DEBUG 模式下 打印了当前控制器,导致block内部打印东西,控制器无法释放

    4,  获取当前控制器,在tableviewCell里面,然后写push跳转。

    会造成当前控制器无法释放

     UIViewController *currentCtrl = [[UIApplication sharedApplication] currentViewController];

    相关文章

      网友评论

          本文标题:控制器无法释放的原因

          本文链接:https://www.haomeiwen.com/subject/tcxfkrtx.html