我面临一个问题,即在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);
答案 0 :(得分:1)
正如评论中所提到的,设置不适合您的上下文。
由于实际使用了15000个UIButton
对象,因此使用了大量内存,因此您的应用速度变慢了。
你说你需要拥有这么多实例,因为你正在为联系人做一些列表。这正是UITableView
或UITableViewController
的用例(它与Apple在其预装的应用程序中使用的UI控件相同)。
它允许您重用单元对象(类UITableViewCell
的实例),而不是为要显示的每个联系人创建一个全新的对象。
您必须实施UITableViewDelegate
和UITableViewDataSource
协议才能使设置生效。这些并非琐事乍一看,但是一旦你开始起飞,你就会很快熟悉底层机制。我建议你从一个简单的教程开始,然后从那里继续你的特定情况。
答案 1 :(得分:0)
不要重新发明轮子!
正如之前的发言者已经指出的那样,你应该使用UITableView
。
但你不必重新发明轮子。有很多实现都面临着这个问题。
在这里你可以找到一个已经使用UITableView
(1:Objective-C,2:Swift)的好实现。
SSMessagesViewController
它基本上是做什么的:
UIView
显示“气泡”UIView
显示在自定义UITableViewCell
UITableViewCell
显示在UITableView
中,以便为您的任务获得高性能