保持カウントとナビゲーション アイテムの破棄を追跡するためのカテゴリ (snippet2) を追加しました。お気軽に同じことを行ってください :) メモリ警告で割り当てが解除されていないようです。説明は、View Controller を Navigation Controller と一緒に使用する必要がないという常識から来ています。それが、nav-item が別のカテゴリ (snippet1) で追加され、そのライフサイクルを nav- で管理する必要がある理由です。ビュー コントローラ インスタンス自体ではありません。
カスタム nav-items が非常に重いため、可能な限りリリースする必要がある場合は、デフォルトの実装をそのままにして、カスタム nav-items カテゴリを追加し、必要に応じてこのアイテムを手動で管理します (nav-item などの必要なUINavigationController
メソッドをオーバーライドすることによって)。コントローラdidReceiveMemoryWarning
、pushViewController:animated:
、popViewControllerAnimated:animated:
)。しかし、本当に必要なときにそのようなケースは想像できません。
スニペット 1
@interface UIViewController (UINavigationControllerItem)
@property(nonatomic,readonly,retain) UINavigationItem *navigationItem; // Created on-demand so that a view controller may customize its navigation appearance.
@property(nonatomic) BOOL hidesBottomBarWhenPushed; // If YES, then when this view controller is pushed into a controller hierarchy with a bottom bar (like a tab bar), the bottom bar will slide out. Default is NO.
@property(nonatomic,readonly,retain) UINavigationController *navigationController; // If this view controller has been pushed onto a navigation controller, return it.
@end
スニペット 2
@implementation UINavigationItem (Logs)
- (id)init
{
NSLog(@"I'm initialized (%@)", [self description]);
self = [super init];
return self;
}
-(void) release
{
NSLog(@"I'm released [%d](%@)", [self retainCount], [self description]);
[super release];
}
-(void) dealloc
{
NSLog(@"I'm deallocated [%d](%@)", [self retainCount], [self description]);
[super dealloc];
}
@end