2010-11-02 62 views
1

如何跟蹤使用1 UITextField的3個輸入字符串?如何使用1 UITextField跟蹤3個輸入字符串

我使用一個UITextField爲用戶輸入切換3種不同的輸入類型(出發地,航空公司,到達)。我省各3在自己的NSMutableString對象像這樣(取決於真實被輸入或者其他什麼):

depart = [input.text copy]; 
arrive = [input.text copy]; 
airline = [input.text copy]; 

我設置的UITextField的值使用

input.text = [arrive copy]; 
input.text = [depart copy]; 
input.text = [airline copy]; 
(這取決於用戶正在進入)

我成功地使用input.text copy跟蹤3個輸入的每一個,但是我在運行Instruments泄漏測試時發現內存泄漏問題。我有一種感覺,這是我使用copy不當清理的結果。我怎樣才能保留每個輸入字符串,不會導致內存泄漏問題?

+0

使用該方法複製創建一個新的對象,而不是隻保留現有的值。 input.text = [航空公司複印件];很好,因爲.text的值是通過屬性訪問的,並且之前的值被釋放。 airline = [input.text copy];會導致內存泄漏。 – Justin 2010-11-02 17:30:32

回答

1

將您的字符串轉換爲保留的屬性。

@property (retain) NSString *airline; 

使用self設置屬性的值。

self.airline = input.text; 

不使用自我,你手動設置值並繞過屬性,所以不保留文本。

在釋放對象 - (空)dealloc方法

然後,當你正在編輯的具體信息,您可以使用屬性來填充文本框

input.text = self.airline; 

這是否有道理?

+0

因此,而不是'@property(nonatomic,retain)NSMutableString * airline;'它會是'@property(nonatomic,copy)NSMutableString * airline;'? – binnyb 2010-11-02 17:18:59

+0

等等,你改變了你的問題,我不確定這是你想要的 – Justin 2010-11-02 17:22:17

+0

不,你是在正確的軌道上沒有複製的東西。等待我的新答案 – Justin 2010-11-02 17:23:05

1

泄漏工具應告訴你泄漏的位置。

雖然這是很明顯的。 您應該在分配新數據之前釋放舊數據。 因此,像

depart = [input.text copy];

所有來電要像

[depart release]; depart = [input.text copy];

你也應該release在類的dealloc方法的所有字符串。

+0

泄漏工具說泄漏是在基礎庫中,極不可能 – binnyb 2010-11-02 17:59:19

+0

同意,泄漏並不總是準確的。 Valgrind雖然只適用於模擬器,但效果更好。 – Vladimir 2010-11-02 18:00:37