考虑以下代码:
+ (NSString *)helloString
{
return @"hello";
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSString *a = [AppDelegate helloString];
NSString *b = [AppDelegate helloString];
NSLog(@"%@", a == b ? @"yes" : @"no");
abort();
}
在我的机器上,结果总是"is"。这是否意味着 NSString 字面值 @"hello"
在 Objective-C 运行时总是相同的“对象”?
其实我的初衷是在NSNotification
的postNotificationName:object:
方法中使用一个唯一可识别的对象绑定(bind)。我计划使用 NSString 文字作为对象。这样做安全/推荐吗?
最佳答案
从历史上看,NSString 文字在一个翻译单元内保证是唯一的,并且在实践中甚至在翻译单元之间也经常是唯一的。据我所知,当前文档不再提出此声明,Clang 文档建议不要依赖它。
如果您想要一个保证始终是同一个对象的字符串,您可以简单地将一个字符串分配给一个全局常量。所有对该常量的引用将肯定产生相同的对象。
不过,关于 NSNotification,我不会使用这样的字符串作为对象。 NSNotification 的语义表明对象参数应该是触发通知的对象——它在概念上“来自”。与通知相关的其他信息在用户信息字典中更有意义。
关于ios - 如何在 Objective-C 中确定相同的 NSString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24920406/