我正在开发一个应用程序,以便拍照。
我最近遇到了一种非常奇怪的行为,这是我的代码。
@interface ViewControllerPhotos : UIViewController
@property (strong) NSString* _albumID;
@end
@implementation ViewControllerPhotos
@synthesize _albumID;
- (void)didReceiveMemoryWarning
{
return;
// commented or not : give the same issue
// [super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self.navigationItem setHidesBackButton:YES];
self._albumID = [Tools generateUUID];
NSLog(@"new photoset : local UUID \"%@\"", self._photoSetLocalID);
}
@end
我的问题是:如果有内存警告,_albumID
中存储的UID会被遗忘并重新生成,因此我的相册会被分成两部分。为什么? strong
关键字不应该能够保留当前值吗?
或者是因为再次调用viewDidload
?如果是这种情况,那么如何确保我们第一次加载我们的视图以进行正确的初始化?这些方法听起来就是为它设计的。
答案 0 :(得分:2)
嗯,您可以通过调试器和手册来解决这个问题,但是......
加载视图时会调用 viewDidLoad
。在低内存情况下,当viewcontroller不可见时,可以卸载视图。在iOS3 +中有一个viewDidUnload
方法。然后,当您按下后退按钮并再次显示视图时,将会怀疑您再次调用viewDidLoad
。
解决这个问题的方法是存储UUID,这样当它重新加载时就不会重新生成。
或者,您可以将作业放在init
方法中。这样它只会被召唤一次。