为什么从用户输入获取的两个NSStrings最终使用相同的地址?

Ano*_*dya 2 macos cocoa objective-c nsstring

我很想知道操作系统或编译器如何管理内存使用情况.以此登录屏幕为例.

如果我为用户ID和密码输入相同的字符串:两次都说"anoop",则以下两个字符串具有相同的地址:

NSString *userID = self.userNameField.stringValue;
NSString *password = self.passwordField.stringValue;
Run Code Online (Sandbox Code Playgroud)

如果我分别输入"anoop"和"Anoop",地址就会改变.

编译器如何知道密码文本与用户ID相同,那么它不是分配新的内存空间而是使用相同的引用?

rob*_*off 5

这种情况下的答案是您正在使用Objective-C标记指针在64位平台上进行测试.在这个系统中,一些"指针"根本不是内存地址; 它们直接在指针值中编码数据.

这些系统上的一种标记指针完全在指针中编码短字符串的常用字符,"anoop"是可以这种方式编码的字符串.

查看周五问答2015-07-31:标记指针字符串,以获得非常详细的解释.