我有一个正常工作的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
。为什么? 提前谢谢!
答案 0 :(得分:6)
立即分配和初始化视图。它们也会立即添加到视图层次结构中。但是,在下次渲染视图层次结构之前,不会要求它们自我渲染。由于这个刷新是在你完成分配视图之前阻塞的主线程上完成的,所以在你至少从这个方法返回之前,你的视图'-drawRect:方法永远不会被调用(可能还有其他方法)在当前事件链和您当前的堆栈上)。