4

以下のような方法を使用して、Xib ファイルからオンデマンドでロードされる一連のカスタム「コントロール」を利用するアプリがあります。

NSArray * topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"AudioPlayer" owner:self options:nil];
InteractiveMovieView *newAudio = [topLevelObjects objectAtIndex:0];

このアプローチは、(アプリの 1 つの「ページ」で有効な) 複数のコントロールが一度に読み込まれる場合を除いて、うまく機能します。

毎回バンドルからロードするのは明らかに非効率的ですが、これにアプローチする別の方法が見つかりません。copyペン先を一度プロパティにロードし、再利用のためにオンデマンドで返却しようとしましたが、返されたコピーが空のペン先の「クリーンな」コピーではないため、うまくいきません。

それが理にかなっていることを願っています。すべての助けに感謝します。

4

2 に答える 2

5

UINibクラスを探しているようですね。ドキュメントから:

同じ nib データを繰り返しインスタンス化する必要があるときはいつでも、アプリケーションはUINibオブジェクトを使用する必要があります。たとえば、テーブル ビューで nib ファイルを使用してテーブル ビュー セルをインスタンス化する場合、nib をUINibオブジェクトにキャッシュすると、パフォーマンスが大幅に向上します。

于 2012-10-24T20:56:59.380 に答える
4

ロブの提案に従って、次のことができます。

@implmentation InteractiveMovieView (NibFactory)

+(id)movieView
{
    static UINib * __nib ;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        __nib = [ UINib nibWithNibName:@"AudioPlayer" bundle:nil ] ;
    });

    InteractiveMovieView * view = [ __nib instantiateWithOwner:nil options:nil ][0] ;
    return view ;
}

@end
于 2012-10-24T21:41:56.717 に答える