是否有必要对新字符串对象进行实例化,如下面的代码所示:
NSString *newText = [[NSString alloc] initWithFormat:@"%@",sender.titleLabel.text];
或者我们可以简单地运行以下代码:
NSString *newText = sender.titleLabel.text;
我相信会返回相同的结果。那么我们何时知道是否需要“alloc”和“init”以及何时不需要?
由于
振
答案 0 :(得分:4)
您只需使用作业(newText = sender.titleLabel.text;
)。
你的两个例子的结果不一样,BTW:在你的第一个例子中你创建了一个新对象,在第二个例子中你重用了一个现有的对象。在第一个示例中,您需要稍后调用[newText release];
(或自动释放),在您的第二个示例中,您可能不会。
如果您打算将字符串存储在实例变量中,则应将其复制(myInstanceVariable = [sender.titleLabel.text copy];
)。原因是因为可能是NSMutableString的一个实例,它可以改变并因此产生意外行为。
答案 1 :(得分:2)
使用时:
NSString *newText = sender.titleLabel.text;
您只是在sender.titleLabel.text上设置指向现有对象的指针。您告诉编译器这个新指针指向NSString类型的对象。
注意:指针newText和sender.titleLabel.txt现在都指向同一个对象,因此当您访问对象时,对底层对象所做的更改(例如更改文本)将会反映出来使用任何一个指针。
注2:使用时:
NSString *newText = [[NSString alloc] initWithFormat:@"%@",sender.titleLabel.text];
您创建了一个全新的对象(通过使用alloc),然后在执行alloc操作时使用字符串值 sender.titleLabel.text 初始化此新对象。现在 newText 和 sender.titleLabel.text 是两个完全不同的NSString对象,它们之间无论如何都不相关,可以完全更改/管理/使用/解除dealloc'd彼此独立。