Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone-将nil设置为IBOutlet时执行错误访问-内存管理_Iphone_Memory Management_Exc Bad Access_Null_Iboutlet - Fatal编程技术网

iPhone-将nil设置为IBOutlet时执行错误访问-内存管理

iPhone-将nil设置为IBOutlet时执行错误访问-内存管理,iphone,memory-management,exc-bad-access,null,iboutlet,Iphone,Memory Management,Exc Bad Access,Null,Iboutlet,我正面临一个恼人的问题,我不知道为什么 我有一个UIViewController,我在模态中呈现如下: interviewsViewController *interviewsVC = [[interviewsViewController alloc] initWithNibName:nil bundle:nil]; [interviewsVC setManagedObjectContext:_managedObjectContext]; UINavigationController *nav

我正面临一个恼人的问题,我不知道为什么

我有一个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];
}
- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    self.scrollView = nil;
    self.pageControl = nil;
}
一旦关闭view controller,我会通过iPhone Simulator菜单发送内存警告,并调用viewdidunload方法:

- (void)dealloc
{
    [_managedObjectContext release];
    [_interviewsArray release];
    [scrollView release];
    [pageControl release];
}
- (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

你有什么想法吗

注:这是标题:

#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;
#导入
@界面访谈VIEWCONTROLLER:UIViewController
{
NSManagedObjectContext*_managedObjectContext;
NSMutableArray*_访谈软件;
NSUInteger _fetchOffset;
CGFloat_lastXValue;
}
@属性(非原子,保留)NSManagedObjectContext*managedObjectContext;
@属性(非原子,保留)NSMutableArray*interviewsArray;
//IBOutlet
@属性(非原子,保留)IBMOutlet UIScrollView*scrollView;
@属性(非原子,保留)IBUIPageControl*pageControl;

我在XIB中设置了scrollview的委托(不在代码中)。

您需要在dealloc中正确释放-

使用-


ViewDidUnload也可以使用,因为在内存不足警告的情况下,这将非常有用。

分析仪是否显示任何潜在问题?分析仪没有任何问题您的问题是
-ViewDidUnload
在对象已解除分配后被调用。当您将属性设置为nil时,您的合成setter方法正试图释放旧值,因为您在
-dealoc
中释放了旧值,所以旧值已经是垃圾。您需要找出为什么视图管理系统仍在向解除分配的控制器发送消息,因为这实际上是您的问题。此外,在
dealloc
viewDidUnload
中,
super
调用应该是该方法中的最后一个调用。@RIP:我就是这么想的。但是为什么模板中有//例如self.myOutlet=nil???参考以下线程,您将得到您的答案-,@MishieMoo:我同意dealloc方法,但在Apple的示例中,他们在第一次调用中调用[super viewDidUnload]。调用顺序取决于super类正在执行的任务,如果您需要更多详细信息,则可以检查以下线程-