在 ARC 中分配



>我面临一个问题,即在 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对象而使用了大量内存。

你说你需要这么多实例,因为你正在为联系人做某种列表。这正是UITableViewUITableViewController的用例(这与Apple在其自己的预安装应用程序中使用的UI控件相同)。

它允许您重用单元格对象(类 UITableViewCell 的实例),而不是为要显示的每个联系人创建一个全新的对象。

您必须实现UITableViewDelegateUITableViewDataSource协议才能使设置正常工作。乍一看,这些并不是太微不足道,但是一旦您开始起飞,您很快就会熟悉潜在的机制。我建议您从一个简单的教程开始,然后从那里转到您的特定情况。

不要重新发明轮子!

正如前面的发言者已经指出的那样,您应该使用UITableView

但是您不必重新发明轮子。有很多实现正面临这个问题。

在这里,你可以找到一个已经使用UITableView的良好实现(1:Objective-C,2:Swift)。SSMessagesViewController

阿卡尼聊天

它基本上做的是:

  • 使用自定义UIView显示"气泡"
  • 使用此自定义UIView在自定义UITableViewCell中显示
  • 使用此自定义UITableViewCell显示在UITableView中,该设法为您的任务获得高性能

最新更新