iPhone - EXC_BAD_ACCESS при установке nil в IBOutlet - Управление памятью - PullRequest
2 голосов
/ 12 января 2012

У меня возникла досадная проблема, и я не могу понять, почему.

У меня есть UIViewController, который я представляю в таком виде:

interviewsViewController *interviewsVC = [[interviewsViewController alloc] initWithNibName:nil bundle:nil];
[interviewsVC setManagedObjectContext:_managedObjectContext];

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:interviewsVC];
[interviewsVC release];
[self presentModalViewController:navigationController animated:YES];
[navigationController release];

Затем, когда я увольняюКонтроллер представления выглядит так:

- (void)dismissViewController
{
     [self dismissModalViewControllerAnimated:YES];
}

Вызывается dealloc:

- (void)dealloc
{
    [_managedObjectContext release];
    [_interviewsArray release];
    [scrollView release];
    [pageControl release];
}

Когда контроллер представления отключается, я отправляю предупреждение памяти через меню симулятора iPhone и метод viewdidunload получаетПозвонил:

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    self.scrollView = nil;
    self.pageControl = nil;
}

Но всегда есть ошибка EXC_BAD_ACCES в self.scrollView = nil ... Более конкретно в этой строке:

@synthesize scrollView;

И я не могу понять, почему?

Если я добавлю точку останова на строке выше этой, scrollView не будет зомби или не будет равен 0x0 ...

У вас есть идея?

PS: Вот заголовок:

#import <UIKit/UIKit.h>

@interface interviewsViewController : UIViewController <UIScrollViewDelegate>
{
    NSManagedObjectContext *_managedObjectContext;

    NSMutableArray *_interviewsArray;

    NSUInteger _fetchOffset;

    CGFloat _lastXValue;
}

@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain) NSMutableArray *interviewsArray;

//IBOutlet
@property (nonatomic, retain) IBOutlet UIScrollView *scrollView;
@property (nonatomic, retain) IBOutlet UIPageControl *pageControl;

И я установил делегат просмотра прокрутки в XIB (не в коде).

1 Ответ

1 голос
/ 12 января 2012

Вам нужно правильно освободить в dealloc-

потребительной

- (void)dealloc {
      [_managedObjectContext release];
      [_interviewsArray release];
      self.scrollView = nil;
      self.pageControl = nil;

      [super dealloc];
}

ViewDidUnload также будет использоваться, поскольку это будет полезно в случае предупреждений о нехватке памяти.

...