4

我有一个应用程序,它使用一组自定义“控件”,这些控件是使用类似于以下方法从 Xib 文件按需加载的:

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

这种方法效果很好,除非同时加载多个控件(在应用程序的一个“页面”上有效)。

每次从捆绑包中加载显然效率低下,但我找不到另一种方法来解决这个问题。我曾尝试将笔尖加载到一个copy属性中并根据需要将其返回以供重复使用,但这不起作用,因为返回的副本绝不是空白笔尖的“干净”副本。

我希望这是有道理的,并感谢所有帮助。

4

2 回答 2

5

听起来您正在寻找UINib课程。从文档中:

UINib每当需要重复实例化相同的 nib 数据时,您的应用程序都应该使用对象。例如,如果您的表格视图使用 nib 文件来实例化表格视图单元格,则在UINib对象中缓存 nib 可以显着提高性能。

于 2012-10-24T20:56:59.380 回答
4

按照 Rob 的建议,您可以执行以下操作:

@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 回答