私は iOS 3 以降、iOS 開発を行っていないので、記憶が少しぼんやりしています (ただし、メモリ管理に苦労したことは一度もありません。
新しいプロジェクトを開始していますが、スケルトン コードが次のように構成されている理由がわかりません。
- (void)dealloc
{
[_window release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc]
initWithFrame:[[UIScreen mainScreen] bounds]]
autorelease];
// ... snip ...
}
- window オブジェクトが自動解放されるのはなぜですか? 古いiOSバージョンでは、このようになったことは一度もなかったと確信しています。
- どこ
_window
から来たの?これはアクセスする別の方法[self window]
ですか?
私はこれを次のように書いたでしょう:
- (void)dealloc
{
[self.window release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc]
initWithFrame:[[UIScreen mainScreen] bounds]];
// ... snip ...
}
自動解放されたオブジェクトを決して解放しないようにといつも私に叩きつけられました。実際、そうすると通常、セグメンテーション違反が発生します。