解除分配的实例| “Malloc_history无法检查进程XYZ,因为该进程不存在。”

时间:2011-01-28 01:09:10

标签: objective-c ios memory-management dealloc malloc-history

我在自定义UIView中使用以下方法有内存问题(是的;)我是iOS新手):

标头文件

....    
@property (nonatomic, retain) NSString * pressureTextLabel;
....

实施绘制一个圆圈和一个标签,其中包含与触摸相关的压力。每次手指触摸都会创建此视图的对象:

- (void)drawRect:(CGRect)theRect{
    CGRect rect = self.bounds;
    CGRect ringRect = CGRectInset(rect, 100, 100);

    // Outer ring.
    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:ringRect];
    ringRect = CGRectInset(rect, 60, 60);
    [path appendPath:[UIBezierPath bezierPathWithOvalInRect:ringRect]];
    path.usesEvenOddFillRule = YES;
    [self.color set];
    [path fill];

    //text label
    rect = CGRectMake(100, 20, 100, 100);

    //This one seems to be the troublemaker
    [pressureTextLabel drawInRect:rect withFont:[UIFont systemFontOfSize:14.0]];

}
只要控制器没有调用以下方法来更新此特定触摸的感应压力,

一切正常。

-(void) setTouchPressureTo: (float) pressure{

    pressureTextLabel = [NSString stringWithFormat:@"%f", pressure];
    [self setNeedsDisplay];

}

我收到以下错误:

*** -[CFString drawInRect:withFont:]: message sent to deallocated instance 0x16e8c0

这使我在应用程序崩溃后调查调试控制台中的内存跟踪:shell malloc_history <PID> 0x17dfb0。结果,控制台返回:

malloc_history cannot examine process 5838 because the process does not存在。

所以这里的问题是:

  1. 有人可以看到明显的保留, 在这里发布问题?
  2. 如何获得malloc_history <PID> <Address&gt;     工作?
  3. 感谢您的时间,重定向和答案!

    Christian

1 个答案:

答案 0 :(得分:2)

问题是你要将一个自动释放的对象(你的[NSString stringWithFormat...])分配给一个ivar(pressureTextLabel)。您应该使用属性访问,例如self.pressureLabel = ...