0

我正在开发一个可以拍照的应用程序。

我最近遇到了一个非常奇怪的行为,这是我的代码。

@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

我的问题是:如果有内存警告,存储在其中的 UID_albumID会被遗忘并重新生成,因此我的相册被分成两半。为什么 ?关键字不strong应该能够保持当前值吗?

还是因为viewDidload再次调用了?如果是这种情况,那么如何确保我们第一次加载视图以获得正确的 init ?这些方法听起来是为它设计的。

4

1 回答 1

2

好吧,你可以用调试器和手册来解决这个问题,但是......

viewDidLoad在视图加载时调用。在视图控制器不可见时内存不足的情况下,视图可能会被卸载。iOS3+ 中有一个viewDidUnload方法。然后,当您按下后退按钮并且视图再次可见时,viewDidLoad将再次调用您所怀疑的。

解决此问题的方法是存储 UUID,以便在重新加载时不会重新生成它。

或者,您可以将分配放在init方法中。这样它只会被调用一次。

于 2012-07-03T12:43:10.810 回答