持久性方案&低内存情况的状态数据(iphone)

时间:2009-09-03 17:37:19

标签: iphone objective-c memory memory-management

从低内存情况回来后,类变量所持有的状态信息会发生什么变化?

我知道视图会被卸载然后重新加载但是一些辅助类和&其中包含的数据是由启动视图的控制器使用的?

相关示例方案:

@interface MyCustomController: UIViewController
{
    ServiceAuthenticator *authenticator;
}

-(id)initWithAuthenticator:(ServiceAuthenticator *)auth;

// the user may press a button that will cause the authenticator
// to post some data to the service.
-(IBAction)doStuffButtonPressed:(id)sender;
@end

@interface ServiceAuthenticator
{
   BOOL hasValidCredentials; // YES if user's credentials have been validated
   NSString *username;
   NSString *password; // password is not stored in plain text
}

-(id)initWithUserCredentials:(NSString *)username password:(NSString *)aPassword;

-(void)postData:(NSString *)data; 
@end

app委托创建ServiceAuthenticator类,其中包含一些用户数据(从plist文件中读取),该类使用远程服务记录用户。

在MyAppDelegate的applicationDidFinishLaunching中:

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{

   ServiceAuthenticator *auth = [[ServiceAuthenticator alloc] initWithUserCredentials:username password:userPassword];

   MyCustomController *controller = [[MyCustomController alloc] initWithNibName:...];
   controller.authenticator = auth;

   // Configure and show the window
   [window addSubview:..];  

   // make everything visible
   [window makeKeyAndVisible];

}

然后,只要用户按下某个按钮,就会调用“ MyCustomController的doStuffButtonPressed ”。

-(IBAction)doStuffButtonPressed:(id)sender
{
   [authenticator postData:someDataFromSender];
}

验证者依次检查用户是否登录(BOOL变量指示登录状态),如果是,则与远程服务交换数据。 ServiceAuthenticator是一种只验证用户凭据一次的类,对该对象的所有后续调用都将是postData。

一旦发生低内存情况并且相关的笔尖和MyCustomController将被卸载 - 当它被重新加载时,重置'ServiceAuthenticator'类的过程是什么?它以前的状态?

我会定期将所有数据保存在实际的模型类中。我是否应该考虑在这些实用程序样式类中保持状态数据?这是要遵循的模式吗?

1 个答案:

答案 0 :(得分:0)

如果您没有在实用程序类中处理低内存警告,则不会释放数据,因此您不必保持其状态。