我有NSString
,firstWord
,其值为“First”。它定义如下:
NSString *firstWord = [[NSString alloc] init];
firstWord = [textView text];
但是,当我尝试检查其值时,如下所示:
if (firstWord == @"First"){}
比较不会返回true,或者我猜是在Objective-C中。我知道它与字符串具有相同的值。所以,从this我很确定问题是我在比较指针,这些指针在这里不一样,即使字符串本身确实具有相同的值。那我怎么能直接比较字符串呢?或者更高效,确保两个字符串对象做具有相同的指针,所以我不必进行相对昂贵的字符串比较吗?
答案 0 :(得分:2)
那么如何直接比较字符串呢?
Cocoa中的字符串比较是使用isEqualToString:
完成的。
或者更高效,确保两个字符串对象具有相同的指针
这是不可能的。一个是字符串文字,存储在应用程序二进制文件的DATA部分;另一个是在你的应用程序堆上。在某些情况下(使用initWithString:@"literal string"
创建字符串),您最终会得到相同的地址,但您不应该依赖它。
顺便说一句,你不需要 - 事实上,不应该,因为你正在创建一个泄漏 - 在将文本视图的文本分配给指针之前分配一个字符串。
答案 1 :(得分:0)
实际上有两个错误。
您的实际问题:
if (firstWord == @"First"){}
需要
if ([firstword compare:@"first"]==NSOrderedSame) ...
仅在firstword不为零时才有效。
另外:
NSString *firstWord = [[NSString alloc] init];
firstWord = [textView text];
这会丢失内存,因为你没有将textview“复制”到字符串中(因为它不可变而无论如何都是不可能的),你只是将另一个字符串对象分配给指针。因此,您分配的空字符串将丢失。
只做
NSString *firstWord;
firstWord = [textView text];
编辑:确保字符串具有相同的指针会更加昂贵,因为您必须保留一个字符串对象表并查找每个字符串,以便您可以用“唯一”字符串替换指针或添加表格的新字符串......