for循环中的分配时间

时间:2012-09-28 21:32:22

标签: objective-c ios for-loop allocation

我有一个正常工作的for循环。我添加了一个新的UIVIew子类分配,在每个循环迭代中完成:

  for (n=something; n>0; n--)
{
   //(...)

    MyView* theview=[[myView alloc]initWithFrame:self.frame];
    float y=sin(DEGREES_TO_RADIANS(currentAngle));
    float x=cos(DEGREES_TO_RADIANS(currentAngle));

    theview.point1=CGPointMake(x, y);  
  // printf x & y here

    [self addSubview:theview];
}

实际上,视图是分配的,但是当我查看视图时,循环内定义的点与point1不同。

实际上,视图的所有迭代似乎都是在循环结束之后分配的,正如在视图绘制的方法中所述的printf所述,在循环的所有迭代中所有printf之后都被调用。调用。 如果不清楚,我会看到类似的东西:

X = 1 Y = 1 x = 2时 Y = 2 X = 3 Y = 3 从视图中看printf 从视图中看printf 视图中的printf

。为什么? 提前谢谢!

1 个答案:

答案 0 :(得分:6)

立即分配和初始化视图。它们也会立即添加到视图层次结构中。但是,在下次渲染视图层次结构之前,不会要求它们自我渲染。由于这个刷新是在你完成分配视图之前阻塞的主线程上完成的,所以在你至少从这个方法返回之前,你的视图'-drawRect:方法永远不会被调用(可能还有其他方法)在当前事件链和您当前的堆栈上)。