iPhone:内存警告摧毁强大的物体?

时间:2012-07-03 12:36:53

标签: objective-c ios5 viewdidload didreceivememorywarning

我正在开发一个应用程序,以便拍照。

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

@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?如果是这种情况,那么如何确保我们第一次加载我们的视图以进行正确的初始化?这些方法听起来就是为它设计的。

1 个答案:

答案 0 :(得分:2)

嗯,您可以通过调试器和手册来解决这个问题,但是......

加载视图时会调用

viewDidLoad。在低内存情况下,当viewcontroller不可见时,可以卸载视图。在iOS3 +中有一个viewDidUnload方法。然后,当您按下后退按钮并再次显示视图时,将会怀疑您再次调用viewDidLoad

解决这个问题的方法是存储UUID,这样当它重新加载时就不会重新生成。

或者,您可以将作业放在init方法中。这样它只会被召唤一次。