幸存的ios记忆警告

时间:2012-06-18 12:18:37

标签: ios ios5 uiviewcontroller uinavigationcontroller

我有一个教程应用程序,演示如何使用UINavigationController。大多数应用程序工作正常。

当我模拟内存警告时,它会丢失一些数据。我在UIViewController中有两个UINavigationController。第一个UIButton视图中有一个UIViewController,当用户触摸UIButton时,会创建第二个UIViewController并按首先UIViewController推送导航堆栈。我通过UIViewController将数据从第二个UIViewController传递到第一个NSNotificationCenter

使用这种方法,应用程序运行正常,但如果我在第二个UIViewController的视图可见时模拟内存警告,则不会传回任何内容。那么在那种情况下我怎么能活下来呢。

1 个答案:

答案 0 :(得分:0)

当触发内存警告时,应用程序会尝试删除不再需要的所有对象。这可能会从第一个UIViewController中删除侦听器。

NSNotificationCenter的问题在于,没有一种简单的方法可以检查监听器是否处于活动状态。

我不知道这种情况是否适合使用NSNotification设置。很容易失去对发送到哪个视图控制器的消息的控制。

也许这种设置更容易(并且可能更安全)。它保留对第一个UIViewController对象的引用

//
//  SecondViewController.h
//  test
//
//

#import <UIKit/UIKit.h>
#import "ViewController.h"

@interface SecondViewController : UIViewController

@property(nonatomic, retain) ViewController *parentViewController;

@end

和.m文件

//
//  SecondViewController.m
//  test
//
//

#import "SecondViewController.h"

@interface SecondViewController ()
    -(IBAction)buttonPressed:(id)sender;
@end

@implementation SecondViewController

@synthesize parentViewController;

-(IBAction)buttonPressed:(id)sender {
    parentViewController.yourObject = @"your value";
}

-(void)dealloc {
    [parentViewController release];
    [super dealloc];
}

按下第二个视图控制器时执行以下操作:

SecondViewController *vc = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    vc.parentViewController = self;
    [self.navigationController pushViewController:vc animated:YES];
[vc release];