有哪些常见方法可以释放ARC未发布的持久内存使用情况?

时间:2016-08-05 10:58:47

标签: objective-c xcode memory-management memory-leaks persistent

当我从一个viewcontroller移动到另一个(包含图像,滚动视图,标签和其他stuf)时,我的持久性不会被释放。

在乐器中,它目前看起来像这样:

enter image description here

事实:

  • 我使用Objective-C,ARC和自动布局
  • 我的" - (无效)dealloc {}"正在被召唤但其中没有任何内容
  • 未启用NSZombie

我尝试过:

  1. 用weakSelf替换所有出现的self

    typeof(self) __weak weakSelf = self;
    
  2. 我使用imageWithContentsOfFile而不是imageNamed

    [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"thumbUp" ofType:@"png"]]
    
    not
    
    [UIImage imageNamed:@"thumbUp.png"]
    
  3. 在" - (void)viewDidDisappear:(BOOL)动画"我有:

    1. 使所有计时器无效

      [_searchAnimationTimer invalidate];
      
    2. 将所有内容设置为nil(每个对象和变量)

      _searchAnimationTimer = nil;
      
    3. 删除观察员

      [[NSNotificationCenter defaultCenter] removeObserver:weakSelf]
      
    4. 将所有代表设置为nil

      [self.tableView setDelegate:nil];
      
    5. 将所有数据源设置为nil

      [self.tableView setDataSource:nil];
      
    6. 我已添加 [super viewDidDisappear:(BOOL)animated]; &#34 ;-(void)viewDidDisappear:(BOOL)动画& #34;

      -(void)viewDidDisappear:(BOOL)animated{
         //Code here
         [super viewDidDisappear:(BOOL)animated];
      }
      
    7. 在" - (void)viewDidLoad" I:

      1. 使用两者

        关闭ViewControllers
        [weakSelf.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
        
      2. _mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        _vc = [_mainStoryboard instantiateViewControllerWithIdentifier:@"Omraden"];
        [_vc dismissViewControllerAnimated:NO completion:^{ }];
        
      3. 在.h我有:

        1. 我为故事板中的所有对象创建了一个IBOutlet。

        2. 并将所有@property设置为弱

          @property (weak, nonatomic) IBOutlet UIView *contentView;
          
        3. 我的下一步是什么?我可以做些什么常见的改变?我是内存管理方面的佼佼者。需要更多信息?我会快速回答:)

          到目前为止的解决方案清单:

          • 在"(void)viewDidDisappear:(BOOL)动画"中,还将每个UIimageView的图像设置为nil,如下所示:

            _someImageView.image = nil;
            
          • 我还补充说:

            for (CALayer* layer in [weakSelf.view.layer sublayers])
            {
               [layer removeAllAnimations];
            } 
            
          • 开始在for-statements中使用@autoreleasepool(不确定在哪里使用它)

            @autoreleasepool{ 
               //code 
            } 
            

0 个答案:

没有答案