问题很简单:如何UITableViewCell从Xib文件加载自定义?这样做允许您使用Interface Builder来设计单元格.由于内存管理问题,答案显然并不简单.这个主题提到了这个问题并建议了一个解决方案,但是在NDA发布之前并且没有代码.这是一个很长的线程,在没有提供明确答案的情况下讨论了这个问题.
这是我用过的一些代码:
static NSString *CellIdentifier = @"MyCellIdentifier";
MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
cell = (MyCell *)[nib objectAtIndex:0];
}
Run Code Online (Sandbox Code Playgroud)
要使用此代码,请创建MyCell.m/.h,它是所需组件的新子类UITableViewCell并添加IBOutlets.然后创建一个新的"空XIB"文件.在IB中打开Xib文件,添加一个UITableViewCell对象,将其标识符设置为"MyCellIdentifier",并将其类设置为MyCell并添加组件.最后,连接IBOutlets到组件.请注意,我们没有在IB中设置文件所有者.
如果未通过其他工厂类加载Xib,则其他方法主张设置文件所有者并警告内存泄漏.我在Instruments/Leaks下测试了上面的内容,没有发现内存泄漏.
那么从Xibs加载单元格的规范方法是什么?我们设置文件的所有者吗?我们需要工厂吗?如果是这样,工厂的代码是什么样的?如果有多种解决方案,让我们澄清每种解决方案的优缺点......