0

シングルトンと UIViewController に問題があります。

Singleton.h

@property (nonatomic, retain) UIViewController *viewController;

Singleton.m

...

@synthesize viewController = _viewController;

- (void)load {
   self.viewController = [[[UIViewController alloc] initWithNibName:@"NibName" bundle: nil] autorelease];
}

- (void)unload {
   [_viewController release];
}

これviewControllerは、 を介してアプリケーションの別の部分で使用されますpushViewController:animated:。でもたまにSingletonクラスのviewControllerメソッドを呼んで解放したい!すべてを呼び出すことがない- (void)unload場合は問題なく、dealloc が呼び出されますが、pushViewController (および viewController が viewDidLoad を実行) の場合、dealloc は機能しません。dealloc 呼び出しのようなことを 2 回行うと...何が間違っているのですか?pushViewController:animated:viewControllerself.viewController = nil;

4

2 に答える 2

1

アンロード関数は次のもののみで構成する必要があります。

- (void)unload {
   self.viewController = nil;
}

保持されたプロパティを nil に設定すると、インスタンス変数が解放されて nil になります。ここでは、プロパティにダングリング ポインターを残しているだけです。

于 2012-08-02T00:57:48.017 に答える
0

nil解放した後、次のように設定する必要があります。

[_viewController release];
_viewController = nil;

そうしないと、次に来た人が無効なポインターで何かをしようとします。

于 2012-08-02T00:55:38.823 に答える