Нераспределенный экземпляр |«Malloc_history не может проверить процесс XYZ, потому что процесс не существует». - PullRequest
0 голосов
/ 28 января 2011

У меня проблема с памятью (да;) Я новичок в iOS) со следующим методом в пользовательском UIView:

Файл заголовка

....    
@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> работать?

Спасибо за ваше время, перенаправления и ответы!

Кристиан

1 Ответ

2 голосов
/ 28 января 2011

Проблема в том, что вы присваиваете автоматически выпущенный объект (ваш [NSString stringWithFormat...]) ивару (pressureTextLabel). Вместо этого вы должны использовать доступ к свойству, как в self.pressureLabel = ....

...