我有一个应用程序,它使用一组自定义“控件”,这些控件是使用类似于下面的方法从Xib文件加载的:
NSArray * topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"AudioPlayer" owner:self options:nil];
InteractiveMovieView *newAudio = [topLevelObjects objectAtIndex:0];
这种方法非常有效,除非一次加载多个控件(实际上在应用程序的一个“页面”上)。
每次从捆绑中加载显然效率低下但我无法找到另一种方法来解决这个问题。我已经尝试将nib加载到copy
属性一次并根据需要返回它以便重复使用,但这不起作用,因为返回的副本永远不是空白笔尖的“干净”副本。
我希望这是有道理的,所有的帮助都值得赞赏。
答案 0 :(得分:5)
听起来你正在寻找UINib
课程。来自文档:
只要需要重复实例化相同的nib数据,您的应用程序就应该使用
UINib
个对象。例如,如果表视图使用nib文件来实例化表视图单元格,则在UINib
对象中缓存nib可以显着提高性能。
答案 1 :(得分: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