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が忘れられて再生成されるため、アルバムが2つに分割されることです。なんで ?strongキーワードは現在の値を維持できるべ​​きではありませんか?

それとも、viewDidloadが再び呼び出されたからですか?その場合、適切な初期化のために初めてビューをロードすることを確認するにはどうすればよいですか?メソッドはそれのために設計されているように聞こえました。

4

1 に答える 1

2

さて、これはデバッガーとマニュアルで理解できますが...

viewDidLoadビューがロードされるときに呼び出されます。ビューコントローラが表示されていないメモリ不足の状況では、ビューがアンロードされる場合があります。viewDidUnloadiOS3+にはメソッドがあります。次に、戻るボタンを押してビューが再び表示されるようにviewDidLoadなると、疑わしいとおりに再度呼び出されます。

これを回避する方法は、UUIDを保存して、リロードされたときに再生成されないようにすることです。

または、initメソッドに割り当てを配置することもできます。そうすれば、一度だけ呼び出されます。

于 2012-07-03T12:43:10.810 に答える