Вопрос

Ну, у меня есть 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];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top