【发布时间】:2012-02-08 20:50:30
【问题描述】:
我遇到了一个烦人的问题,我不知道为什么。
我有一个 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;
}
但是在 self.scrollView = nil 上总是有一个错误 EXC_BAD_ACCES ... 更具体地说,在这一行:
@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 中设置了滚动视图的委托(不在代码中)。
【问题讨论】:
-
分析器是否显示任何潜在问题?
-
Analyzer Max 什么都没有
-
您的问题是
-viewDidUnload在您的对象已被释放后被调用。当您将属性设置为 nil 时,您的综合 setter 方法会尝试释放旧值,这已经是垃圾,因为您在-dealloc中释放了它。您需要找出为什么视图管理系统仍在向您释放的控制器发送消息,因为这实际上是您的问题。
标签: iphone memory-management exc-bad-access null iboutlet