2011-04-10 34 views
0

我仍然在學習Objective C的基本語法,所以這個答案可能很明顯。我在這裏要做的是讓display.text等於所有「newtext」實例(每次「i」更改)在列表中。我將如何顯示此循環的每個迭代? Objective C

NSArray *newsArray = [NSArray arrayWithObjects: @"news", @"latest", @"trending", @"latebreaking", nil]; 
     for(int i=0; i<4; ++i) 
     { 
      NSString *newText = [NSString stringWithFormat:@"%@%@\n", [newsArray objectAtIndex: i],[sufField text]]; 
      display.text = newText; 
     } 

謝謝!

回答

1

答案取決於display.text是什麼。如果它是不可變字符串:

•讀/寫對象屬性(例如property (readwrite, assign) NSString *text;);或

•結構的領域(如struct { NSString *text; ... }

那麼你需要做的是通過附加newText創建串什麼的核心:

display.text = [display.text stringByAppendingString:newText]; 

如果您正在使用自動垃圾收集,然後你就完成了。

如果不是,您需要知道display.text的所有權。假設display.text擁有其值(通常情況下),並且屬性或結構字段被定義爲正上方,然後該代碼變爲:

NSString *oldText = display.text; 
display.text = [[oldText stringByAppendingString:newText] retain]; // create new string and retain 
[oldText release]; // release previous value 

現在,在屬性的情況下,可以定義屬性本身做retain/release,通過將其定義爲:

property (readwrite, retain) NSString *text; 

,然後追加是回:

display.text = [display.text stringByAppendingString:newText]; 

現在display.text可能是可變字符串,這是一個好主意,如果你打算追加了很多價值給它的,那就是它是:

•讀/寫對象的屬性(例如property (readwrite, assign) NSMutableString *text;);或

•結構的字段(例如struct { NSMutableString *text; ... }

則追加使用新的字符串:

[display.text appendString:newText]; 

,就是這樣。 (在屬性情況下,指定retain並不重要 - 代碼相同。)

自動垃圾回收,對象所有權以及不可變和可變類型之間的差異是理解語義的核心Objective-C - 瞭解所有這些情況,你就會順利的進行下去!

+0

謝謝你,這是一個非常有幫助的答案!我會盡快完善它! – Ktmock13 2011-04-10 19:45:16