当我们定制UIView的时候,有时候也会想用xib定制,因为这样会直观一些,而且以后修改的时候也容易修改。但是有时候UIView需要在iPhone4和iPhone5上适配。需要有2套UI的方案。这个时候只用一个xib,会比较麻烦,所以我选择了使用2套xib。然而2套xib的话,如果建2个xib文件会显得有些多余。于是我就想在一个xib文件里面弄出来2个uiview:
如图所示,在GuideView.xib中我们放置了2个VIew,一个是iPhone5的一个是iPhone4的。这时候我们我们根据是不是iPhone5来判断要使用哪个view
+ (GuideView*)getGuideView
{
BOOL iPhone5 = CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size);
NSArray* viewAry = [[UINib nibWithNibName:@"GuideView" bundle:nil] instantiateWithOwner:self options:nil];
GuideView* guide = nil;
if (iPhone5)
{
guide = [viewAry objectAtIndex:0];
}else
{
guide = [viewAry objectAtIndex:1];
}
return guide;
}
表面上看起来这是没问题的,但是正在调试的过程中发现了一个很大的问题
- (void)dealloc
{
NSLog(@"guideView dealloc");
[super dealloc];
}
输出:
2013-12-23 20:16:20.587 Test_Test[10002:a0b] guideView dealloc
中间我们什么都没干,为什么一创建就会dealloc呢?
原因很简单:
NSArray* viewAry = [[UINib nibWithNibName:@"GuideView" bundle:nil] instantiateWithOwner:self options:nil];
因为xib文件中又2个view,2个view的类型都是GuideView,通过这个方法,我们已经创建了2个GuideView。然而我们使用的过程中只使用了一个,另一个超出作用域就已经释放了,而释放必然会调用dealloc方法。不过这个时候因为是不用的这个释放,所以并不影响我们使用另外一个