nev*_*ing 1 string objective-c
在Pragmatic Core Data一书中,我遇到了一个NSStringsetter的代码片段:
- (void)setMyString:(NSString*)string;
{
@synchronized(self) {
if ([string isEqualToString:myString]) return;
[myString release];
myString = [string retain];
}
}
Run Code Online (Sandbox Code Playgroud)
有没有理由使用[string isEqualToString:myString]而不是在string == myString这里?这不是说如果两个字符串具有相同的内容,结果将不同于它们实际上是同一个对象吗?这有关系吗?
谢谢.
请注意,您要比较的变量是指向NSStrings的指针.指针比较只是检查指针是否指向相同的地址.它最后对内容一无所知.两个不同位置的两个字符串对象可以具有相同的内容.因此你需要isEqualToString:.在这种情况下,我不确定这是一个非常重要的区别.如果它是特殊的套管,根据新字符串是否实际上是一个变化发出更改通知,对我来说会更有意义.
顺便说一下,在NSString setter中,你几乎总是想要copy而不是retain.我不知道本书中的确切用例,但是如果你只保留字符串并且它恰好是可变的,它可能会在你的背后发生变化并导致奇怪的结果.如果字符串不可变,那copy只是一个别名retain.