0

好吧,我有一个 UITextField。

它里面是一个属性 UITextField.text。

可以这样做吗:

// Assume we have UITextField * tf somewhere..
// now set its text..
tf.text = [ [ NSString alloc ] initWithUTF8String:"Init'd with utf8" ] ;

我的问题是内存。 UITextField 的 text 属性的旧值会发生什么变化。

你不必这样做:

// 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 中一样考虑内存管理。这可能是这里的缺陷。

4

2 回答 2

2

UITextField 将负责释放它拥有的任何旧值。您只关心您的代码,并且必须释放这个分配的 NSString 是正确的。

您还可以使用 autorelease 来避免额外的声明。

tf.text = [ [ [ NSString alloc ] initWithUTF8String:"Init'd with utf8" ] autorelease];
于 2009-11-02T17:11:57.120 回答
0

tf.text 是一个二传手。查看头文件,定义了属性:

@property(nonatomic,copy) NSString *text;

因此,我认为您应该这样设置,并让系统自己处理副本:

mytext = [ [ NSString alloc ] initWithUTF8String:"Init'd with utf8" ] ;
tf.text = mytext;
[mytext release];
于 2009-11-02T19:46:26.463 回答