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相同,那么它不是分配新的内存空间而是使用相同的引用?
这种情况下的答案是您正在使用Objective-C标记指针在64位平台上进行测试.在这个系统中,一些"指针"根本不是内存地址; 它们直接在指针值中编码数据.
这些系统上的一种标记指针完全在指针中编码短字符串的常用字符,"anoop"是可以这种方式编码的字符串.
查看周五问答2015-07-31:标记指针字符串,以获得非常详细的解释.