2009-09-04 24 views
0

他のクラスをインスタンス化するクラスがあります。それは、彼らの寿命を制御するために働いています;)ルートクラスのイベントを含むルートビューのサブビューです。動的オブジェクトの作成と解放

私はビューごとにたくさんのグラフィックを含んでおり、次のものをロードする前に物をクリアする必要があります。

現在のサブビューをアンロードする方法と、イベントハンドリングで使用する名前付き参照を維持しながら、次のサブビューをロードする方法については、「終了しました」メソッドから考えてください。古いサブビューをダンプし、新しいものへのハンドルを保持したいと仮定すると、

おかげ // :)

+1

サブビューをシームレスに交換したいですか?遷移?スクロール? –

+0

アンロードされているサブビューからイベントを受け取り続ける必要がある理由を理解できませんか? 「次のビュー」の読み込みに、ユーザーがキャンセルしたいと思うほどの時間がかかりますか? Weatherやストックアプリケーションのように、現在表示されている画面と左右に2つの潜在的な次の画面がロードされるように作成していますか?しかし、他の潜在的な20ページですか? – PeyloW

+0

シームレスにサブビューをスワップすることは、私がやろうとしていることに最も近いようです。 – Spanky

答えて

0

、これは実際にはかなり簡単です。あなたは次のようなものを望んでいます:

@interface YourView : UIView 
{ 
    // Create an ivar in your class 
    UIView *_subview; 
} 

// Propertize it as retain to take care of most of the heavy lifting 
@property(nonatomic, retain) UIView *subview; 

@end 


@implementation YourView 

// Map the ivar to the property 
@synthesize subview = _subview; 

// Call this to put in a new subview 
-(void) switchToNewSubview:(UIView*)newSubview 
{ 
    // Remove the old subview, set the new one, and if the new one isn't nil 
    // add it as a subview 
    [self.subview removeFromSuperview]; 
    self.subview = newSubview; 
    if(newSubview) 
     [self addSubview:self.subview]; 
} 

// Don't forget to nil out the subview on dealloc to release it 
-(void) dealloc 
{ 
    self.subview = nil; 
    [super dealloc]; 
} 

@end 
関連する問題