菜鸟教程小白 发表于 2022-12-13 14:14:05

iphone - 由于内存问题/MBProgressHUD 指示器导致应用程序崩溃


                                            <p><p>我有一个奇怪的问题。
我目前正在开发一个邮件应用程序,它曾经随机崩溃而没有错误或登录到我的控制台。我检查了我的崩溃日志,它向我显示了内存不足的警告,并在我的应用程序旁边写了抛弃。 <img src="/image/eyWbM.png" alt="Crash Report"/> </p>

<p>所以我怀疑这是一个内存问题,并回去跟踪我的应用程序的内存使用情况。
我使用分配工具来检测整体使用情况,当它的堆大小仅为 4.59 MB 时,我的应用程序崩溃了。 <img src="/image/oftlh.png" alt="Instrument snapshot"/> </p>

<p>仪器指向我正在使用 MBProgressHUD 指标的函数。
罪魁祸首是这一行:</p>

<pre><code>;
</code></pre>

<p>如果我将其替换为
<code></code> 一切正常,没有问题..</p>

<p>代码如下:</p>

<pre><code>    -(void) showHUDActivityIndicatorOnView:(UIView*)view whileExecuting:(SEL)method
                                 onTarget:(id)target withObject:(id)object withText:(NSString*)label{
    self.HUD = [ initWithView:view] ;
      self.navigationController.navigationItem.hidesBackButton = YES;
      ;
    self.HUD.delegate = nil;
    self.HUD.labelText = label;
    ;   
}
</code></pre>

<p><code>self.HUD</code> 是一个被保留的属性。</p>

<p><code>showWhileExecuting</code>方法稍作修改如下:</p>

<pre><code>- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated {

    MyAppdelegate *appDelegate = (MyAppdelegate *).delegate;
    if(!appDelegate.isRequestActive)
    {
    methodForExecution = method;
    targetForExecution = ;
    objectForExecution = ;

    // Launch execution in new thread
    taskInProgress = YES;
    ;

    // Show HUD view
    ;
    }
    else {
      ;
    }
}
</code></pre>

<p>目前我已经从我的应用程序中删除了它,它现在工作正常,即使使用 20 - 30 MB 堆内存它也不会崩溃。 </p>

<p>我不是在这里寻找具体的答案或解决方案。我正在寻找调试方法/技术来调试问题,以便了解导致我的应用崩溃的原因。</p>

<p>是不是内存溢出。如果是这种情况,那么我现在如何使用 20-30 MB。
如果这不是内存问题,为什么我的崩溃报告器会在我的应用名称旁边显示被抛弃。</p>

<p>罪魁祸首<code>()</code></p>

<p>每次我调用这个函数时,都会增加一些内存,因为缓存了一些元素。但是当内存达到 4.5 MB ...这条线导致它崩溃</p>

<p>如何找到此问题的根本原因。我如何弄清楚为什么 iOS 正在杀死我的应用程序被抛弃的原因写在我的应用程序旁边</p>

<p>任何帮助或建议将不胜感激。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>好的。问题是我正在使用在我的 View 上添加 HUD 进度条
<code>[查看 addSubview:self.HUD]</code>;</p>

<p>我忘记在其委托(delegate)方法中将其从 superView 中删除:</p>

<pre><code>- (void)hudWasHidden:(MBProgressHUD *)hud
{
    // Remove HUD from screen when the HUD was hidded
    ; //app crashes at 4.59 MB if you comment this
    ;
    HUD = nil;
}
</code></pre>

<p>因为每次都在一个 UIView 上添加了几个 View ...我猜每个 UIView 顶部的子 subview 的数量都有一个上限...。苹果应该在他们的文档中提到这一点... </p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 由于内存问题/MBProgressHUD 指示器导致应用程序崩溃,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/11068254/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/11068254/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 由于内存问题/MBProgressHUD 指示器导致应用程序崩溃