Управление свойством UITextField.text
-
12-09-2019 - |
Вопрос
Ну, у меня есть UITextField.
Внутри него находится свойство UITextField.text.
Можно ли сделать:
// Assume we have UITextField * tf somewhere..
// now set its text..
tf.text = [ [ NSString alloc ] initWithUTF8String:"Init'd with utf8" ] ;
Моя проблема с этим - память. Что происходит к старому значению текстового свойства UITextField.
Разве вам не нужно делать:
// maintain reference to old NSString
NSString * oldTfText = tf.text ;
// set the value to the new value you want
tf.text = [ [ NSString alloc ] initWithUTF8String:"Init'd with utf8" ] ;
// release the old NSString now..
[ oldTfText release ] ;
Я все еще думаю об управлении памятью, как и в обычном C.Возможно, здесь есть недостаток.
Решение
UITextField будет нести ответственность за освобождение любого имеющегося у него старого значения.Вас беспокоит только ваш код, и вы правы, что выделенную NSString необходимо освободить.
Вы также можете использовать autorelease, чтобы избежать дополнительного объявления.
tf.text = [ [ [ NSString alloc ] initWithUTF8String:"Init'd with utf8" ] autorelease];
Другие советы
tf.text — это установщик.Глядя на файлы заголовков, свойство определено:
@property(nonatomic,copy) NSString *text;
Таким образом, я думаю, вам следует установить это следующим образом и позволить системе позаботиться о своей собственной копии:
mytext = [ [ NSString alloc ] initWithUTF8String:"Init'd with utf8" ] ;
tf.text = mytext;
[mytext release];