>我面临一个问题,即在 ARC 启用项目中,如果通过调整其 y 位置将按钮添加到滚动视图,则分配显示 50%。但在 ARC 中,它不应该正确显示。那个 for 循环可能会迭代 15000 次 .我得到了无限的内存增长,我观察到当计数增加时进度条变得懒惰。示例代码为
static int i;
for(;i<15000;i++)
{
UIButton *but = [UIButton buttonWithType:UIButtonTypeCustom];
but.frame = CGRectMake(50, j, 60, 30);
j = j+30;
[_scroll addSubview:but];
}
在这里,我得到了 50% 的分配。
but.frame=CGRectMake(50, j, 60, 30);
如评论中所述,设置不太适合您的上下文。
您的应用速度变慢,因为它由于实例化了 15000 个UIButton
对象而使用了大量内存。
你说你需要这么多实例,因为你正在为联系人做某种列表。这正是UITableView
或UITableViewController
的用例(这与Apple在其自己的预安装应用程序中使用的UI控件相同)。
它允许您重用单元格对象(类 UITableViewCell
的实例),而不是为要显示的每个联系人创建一个全新的对象。
您必须实现UITableViewDelegate
和UITableViewDataSource
协议才能使设置正常工作。乍一看,这些并不是太微不足道,但是一旦您开始起飞,您很快就会熟悉潜在的机制。我建议您从一个简单的教程开始,然后从那里转到您的特定情况。
不要重新发明轮子!
正如前面的发言者已经指出的那样,您应该使用UITableView
。
但是您不必重新发明轮子。有很多实现正面临这个问题。
在这里,你可以找到一个已经使用UITableView
的良好实现(1:Objective-C,2:Swift)。SSMessagesViewController
阿卡尼聊天
它基本上做的是:
- 使用自定义
UIView
显示"气泡" - 使用此自定义
UIView
在自定义UITableViewCell
中显示 - 使用此自定义
UITableViewCell
显示在UITableView
中,该设法为您的任务获得高性能