答案取決於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 - 瞭解所有這些情況,你就會順利的進行下去!
來源
2011-04-10 19:04:25
CRD
謝謝你,這是一個非常有幫助的答案!我會盡快完善它! – Ktmock13 2011-04-10 19:45:16