gpt4 book ai didi

objective-c - 可编辑 UITableView 数据源的可能实现

转载 作者:行者123 更新时间:2023-12-03 17:48:32 26 4
gpt4 key购买 nike

我正在寻求实现一个 UITableView,其中包含代表媒体播放器的最近历史记录和 future 队列的部分。在我看来,队列类型的结构最适用于此,因为这代表了操作的本质,但是 future 队列部分可编辑的要求提出了一些挑战。

我认为链接列表是存储媒体表示的最佳选择,而不是所有元素连续存储的向量类型结构。在我看来,在移动或删除队列中的对象并在末尾添加对象的情况下,链表比向量更有效,因为简单地分配几个指针不同的值似乎比移动整个 block 更轻量级的内存。 NSMutableArray 的内部实现细节看起来相当晦涩,但我假设它是一个向量类型。

但是,我从未真正见过 Objective-C 中真正的链表实现。此外,UITableViewDataSource 的结构要求使用特定行调用 cellForRowAtIndexPath:,而不是简单地迭代列表,这暴露了链表实现的弱点,因为需要寻找一个特定的索引可能会很昂贵。如果 cellForRowAtIndexPath: 仅按顺序调用,则这是无关紧要的,但忽略 indexPath 参数而只迭代列表似乎是鲁莽的。

这些结构通常是如何实现的?按照建议迭代链接列表是一个坏主意吗?

最佳答案

由于 Objective-C 没有明确定义的“链表”对象类型,最接近的替代方案是 NSMutableArray

你永远不应该假设其中的顺序

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;

将被调用,如果您正确实现了UITableView,则只应在单元格出现在屏幕上之前为单元格的索引路径调用它(因此,它的调用顺序将根据单元格的索引路径而改变)用户滚动的方向)。

我建议您创建一个二维 NSMutableArray,其中第一个代表表中的部分,第二个代表每个部分中的行。然后,您可以使用以下内容初始化数组:

self.sectionsArray = [NSMutableArray array];
[self.sectionsArray addObject:[NSMutableArray array]]; // history rows
[self.sectionsArray addObject:[NSMutableArray array]]; // queued rows

这将允许您使用以下内容轻松检索存储的项目:

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
NSUInteger section = indexPath.section;
NSUInteger row = indexPath.row;
id fetchedObject = self.sectionsArray[section][row];

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellReuseID"];
// perform setup here based on the fetchedObject
return cell;
}

我在下面列出了一些可能对您有用的 NSMutableArray 方法:

- (void)addObject:(ObjectType)anObject;
- (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index;
- (void)removeObject:(ObjectType)anObject atIndex:(NSUInteger)index;
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(ObjectType)anObject;
- (void)removeLastObject;

关于objective-c - 可编辑 UITableView 数据源的可能实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38756937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com