2012-09-28 70 views
0

我有一個for循環工作正常。我添加了一個新的UIView子類分配內,在每個循環迭代要做:在for循環中的分配時機

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]; 
} 

事實上,theview分配,但在循環內部確定的點是不一樣的點1,當我看着在theview 。

事實上,theview的所有迭代似乎環路結束之後將被分配,如通過theview的drawRect方法內一個printf在循環的所有迭代所有printf的被稱爲後調用說明。 如果不明確的,我看到類似的東西:

X = 1 Y = 1 X = 2 Y = 2 X = 3 Y = 3 從視圖 printf的視圖 的printf的printf從視圖

。爲什麼? 在此先感謝!

+2

只是一些建議風格 - 用大寫字母開始你的類名。 MyView不是myView。用小寫字母開始你的變量(就像你正在做的那樣)。這會讓其他開發者更容易閱讀。 – bandejapaisa

+0

我並不完全遵循你的問題在這裏。但是在屏幕上呈現視圖時調用drawRect。循環完成後,在下一輪事件循環中。你的myView被分配在你的循環中。 – digidigo

+0

Bandejapaisa你是對的,我很累。編輯我的問題。 – NightCoder

回答

6

立即分配和初始化視圖。它們也會立即添加到視圖層次結構中。但是,直到下一次渲染視圖層次結構時纔會要求他們自己渲染。由於此刷新是在主線程上完成的,在您完成分配視圖之前會阻止您的視圖,因此在您至少從此方法返回之前,將永遠不會調用視圖的-drawRect:方法(可能還有其他方法在當前事件鏈和當前堆棧上)。

+0

謝謝。我可以看到視圖以相反的順序渲染,渲染的第一個是創建的最後一個。那是我誤解的一部分。 – NightCoder