ios - iPad上的drawRect导致内存问题
<p><p>我有一个 5-tab Tab Bar Controller iPad 应用程序。
选项卡之一 (EKG) 导致内存问题。我已经运行了 Instruments,我所能看到的只是 <code>malloc</code> 分配不断增加,大约 12 分钟后,我的所有 ViewController 首先获得 <code>didReceiveMemoryWarning</code> 级别 1,然后是2 级,然后是 <code>SigAbort 0 终止</code>。</p>
<p>应用程序的设计工作方式是,当 EKG 选项卡处于事件状态时,每 200 毫秒触发一次 <code>setNeedsDisplay</code>,以便在屏幕上绘制(绘制)EKG 样本。当我让应用程序正常运行时,它会在大约 12 分钟后终止。</p>
<p>但是,如果我保留 <code>setNeedsDisplay</code> 并注释掉 <code>drawRect</code> 中的代码,它将运行
永远。我不知道我的“drawRect”中有任何内存分配,但有人在做这些 <code>mallocs</code> 下面是我的 <code>drawRect</code> 代码:</p>
<pre><code>- (void) drawRect : (CGRect) rect
{
int i, ii, x = 0, xx, y;
fEcgDraw = YES;
CGContextRef context = UIGraphicsGetCurrentContext ();
CGContextSetLineWidth (context, 1);
HH = 376;
if (fEcgErase == YES)
{
CGContextSetStrokeColorWithColor (context,
.CGColor);
/*==============================================================================*/
/* Erase the last screen. */
/*==============================================================================*/
for (i = 0; i < 120; i++)
{
CGContextMoveToPoint (context,
ECGX,
(HH - ECGS));
CGContextAddLineToPoint (context, ECGX[(x + 1)],
(HH - ECGS[((x + 1) % 119)]));
x++;
} // end - for (i = 0; i < 120; i++)
CGContextStrokePath (context);
fEcgErase = NO;
} // end - if (fEcgErase == YES)
else if (fECGLOOP)
{
xx = 1;
x = 0;
y = YY;
ii = 0;
for (i =
{
// if (xx == 1)
{
/*==============================================================================*/
/* First erase the prior ECG A/D plot value. */
/*==============================================================================*/
CGContextSetStrokeColorWithColor (context,
.CGColor);
CGContextMoveToPoint (context,
ECGX,
(HH - ECGS));
CGContextAddLineToPoint (context,
ECGX[(x + 1)],
(HH - ECGS[((x + 1))]));
CGContextStrokePath (context);
/*==============================================================================*/
/* Now plot the next ECG A/D plot value. */
/*==============================================================================*/
CGContextSetStrokeColorWithColor (context,
.CGColor);
CGContextMoveToPoint (context,
ECGX,
(HH - ECGY));
CGContextAddLineToPoint (context,
ECGX[(x + 1)],
(HH - ECGY[((y + 1) % 119)]));
CGContextStrokePath (context);
ECGS = ECGY;
x++;
y = ((y + 1) % 119);
} // end - if (xx == 1)
} // end - for (i = 0; i < 120; i++)
y = ((y + count1) % 119);
YY = y;
count1 = 0;
} // end - if (fEcgErase == YES)
fEcgDraw = NO;
} // end - 'drawRect'
/*===============================END OF FUNCTION================================*/
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>问题已通过在每个“CGContextStrokePath”之前添加“CGContextClosePath”得到解决,应用现在将永远运行而没有任何“didReceiveMemoryWarning”。</p>
<p>-吉尔·古德里奇</p></p>
<p style="font-size: 20px;">关于ios - iPad上的drawRect导致内存问题,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/7216165/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/7216165/
</a>
</p>
页:
[1]