Iphone 内存警告后导航控制器堆栈问题

Iphone 内存警告后导航控制器堆栈问题,iphone,ios,uinavigationcontroller,Iphone,Ios,Uinavigationcontroller,我在程序中使用UINavigationController,当我位于导航堆栈中的第四个或第五个控制器上时,程序接收到内存警告,我无法返回。我按下后退按钮,导航栏动画正在进行,但控制器并没有弹出,我仍然看到旧视图。有人能帮我处理这个问题吗 “我的子视图”具有以下属性: @property (nonatomic,retain) UITableView *searchTableView; @property (nonatomic,retain) UISegmentedControl *category

我在程序中使用UINavigationController,当我位于导航堆栈中的第四个或第五个控制器上时,程序接收到内存警告,我无法返回。我按下后退按钮,导航栏动画正在进行,但控制器并没有弹出,我仍然看到旧视图。有人能帮我处理这个问题吗

“我的子视图”具有以下属性:

@property (nonatomic,retain) UITableView *searchTableView;
@property (nonatomic,retain) UISegmentedControl *categorySegmentedControl;
@property (nonatomic,retain) UISearchBar *searchTableBar;
@property (nonatomic,retain) UIView *footerView;
@property (nonatomic,retain) UINavigationItem *navigationItem;
我的viewDidUnload方法

- (void)viewDidUnload
{
  [super viewDidUnload];
  self.searchTableView = nil;
  self.categorySegmentedControl = nil;
  self.searchTableBar = nil;
  self.navigationItem = nil;
  self.footerView = nil;
}
我的dealloc

-(void)dealloc
{
  [super dealloc];
  [searchTableView release];
  [categorySegmentedControl release];
  [searchTableBar release];
  [navigationItem release];
  [footerView release];
  [currentValues release];
}

我注意到了奇怪的规律性——只有当我从没有选项卡栏的视图移动到有选项卡栏的视图时,这个错误才会出现

听起来您可能在控制器的viewDidLoad中进行了一些设置,和/或在viewDidUnload中发布了应该在initWithNibName:bundle和dealloc中完成的内容

创建和销毁控制器时不会调用viewDidLoad和viewDidUnload,在创建和销毁控制器内的视图时会调用viewDidLoad和viewDidUnload,这种情况随时都可能发生,尤其是当视图控制器位于后台时(例如,导航控制器中不是俯视图)收到内存警告时

确保编写控制器时,如果调用viewDidUnload,或者多次调用viewDidLoad,则不会丢失数据或破坏任何内容


很抱歉,如果这个答案有点模糊,但是如果您发布视图控制器的代码,我可能会给您更具体的建议。

您的视图控制器是否正确处理viewDidLoad和viewDidUnload?是的,我的viewDidUnload中有self.myIBOtlet=nil我的viewDidUnload方法中没有链接到我的视图状态的内容,但是我在viewDidUnload方法中为所有IBoutlet设置了self.myIBOutlet=nil。您是否可以在viewDidUnload中将一些不是视图的内容设置为nil?在viewDidUnload中,应仅将视图设置为nil,而不应将视图控制器或其他属性设置为nil。试着把你的viewDidUnload方法粘贴到你的问题中,我来看看。看起来非常正确。但是不确定self.navigationItem,您是否在nib中设置了它?通常这是自动创建的。是的,但是viewController已经有一个名为navigationItem的属性,所以我想知道使用相同名称的属性重写该属性是否与出错有关。这可能不是问题,只是一个理论。我真的不知道如何使用自定义navigationItem来解决这个问题,但删除self.navigationItem似乎可以解决我的问题!我在模拟器中模拟记忆警告,它可以工作,迫不及待地想明天在设备上试用它!非常感谢!