Iphone 跨多个视图管理内存
我正在构建一个应用程序,它有一个由地图视图组成的主视图。第二个视图有一些必要的配置选项(配置视图)。我使用部分卷曲序列切换到此配置视图 我遇到的问题是没有维护配置视图的状态 比如说, 我将进入配置视图,对设置进行一些更改,然后返回主地图视图。一旦我再次返回到配置视图,这些值将返回到它们的默认值。所讨论的值是distanceFilterValue 下面是我的配置视图控制器的实现:Iphone 跨多个视图管理内存,iphone,objective-c,ios,xcode4,ios5,Iphone,Objective C,Ios,Xcode4,Ios5,我正在构建一个应用程序,它有一个由地图视图组成的主视图。第二个视图有一些必要的配置选项(配置视图)。我使用部分卷曲序列切换到此配置视图 我遇到的问题是没有维护配置视图的状态 比如说, 我将进入配置视图,对设置进行一些更改,然后返回主地图视图。一旦我再次返回到配置视图,这些值将返回到它们的默认值。所讨论的值是distanceFilterValue 下面是我的配置视图控制器的实现: @interface SimpleConfigViewController() //private interface
@interface SimpleConfigViewController()
//private interface inside implementation
@property (weak, nonatomic) UISlider * distanceFilterSlider;
@property (strong, nonatomic) NSNumber *distanceFilterValue;
@end
@implementation SimpleConfigViewController
@synthesize distanceFilterLabel = _distanceFilterLabel;
@synthesize distanceFilterSlider = _distanceFilterSlider;
@synthesize distanceFilterValue = _distanceFilterValue;
- (NSNumber *)distanceFilterValue {
if (!_distanceFilterValue) {
_distanceFilterValue = [NSNumber numberWithFloat:250.0];
}
return _distanceFilterValue;
}
- (IBAction)distanceSliderValueChanged:(UISlider *)sender {
self.distanceFilterValue = [NSNumber numberWithFloat:sender.value];
//update GUI
self.distanceFilterLabel.text = [NSString stringWithFormat:@"%.f m", sender.value];
}
@end
在我看来,因为我保留了一个指向distanceFilterValue的强指针,所以当我返回配置视图时,这个值应该是正确的。我显然遗漏了一些东西
提前感谢您的帮助。我可能错了,但我猜配置视图已卸载,并在第二次推送时从
XIB
再次加载
无论如何,您应该将值存储在模型对象中,而不是控制器中 我认为Erik是对的,每次为configView调用viewDidLoad时,它都会重置。您可以使用Singleton或NSUserDefaults来解决此问题。与此相关的是映射视图的实现。在我实际开始将配置值连接到映射视图之前,我正在尝试使配置视图独立于映射视图工作。我已放置日志消息来测试此问题,并且在第一次调用配置视图viewDidLoad的加载。但返回地图视图后,不会调用VIEDIDUNLOAD。我意识到我应该在模型对象中放置distanceFilterValue,但保持指向NSNumber对象的强指针不会达到同样的效果吗?我的模型将是一个简单的包装类,我将为其保留一个强大的指针。(这是我的思考过程,我的假设很可能是错误的)我想我不明白的是,在什么时候(以及为什么)我的distanceFilterValue强指针被释放了?在您的configView中viewDidLoad中有什么?只是标准的[super viewDidLoad];