– [Nsstring哈希]其实是调用 – [NSCFString哈希](由于免费桥接).
如果创建一个在同一个字符串上调用[Nsstring hash]的程序,并且在调用之间中断并更改备份该字符串的内存,则可以获得重新计算的哈希值.这告诉我没有缓存涉及.
(gdb) b -[NSCFString hash]Breakpoint 1 at 0x3b02fa3(gdb) rBreakpoint 1,0x93652fa3 in -[NSCFString hash] ()(gdb) cContinuing.2009-05-13 14:23:39.003 a.out[1754:813] Hash: -327163326
注意哈希值.
Breakpoint 1,0x93652fa3 in -[NSCFString hash] ()(gdb) bt #0 0x93652fa3 in -[NSCFString hash] ()#1 0x00001f73 in main () at test.m:10(gdb) fra 1#1 0x00001f73 in main () at test.m:1010 NSLog(@"Hash: %d",[m hash]);(gdb) info localspool = (NSautoreleasePool *) 0x109760m = (Nsstring *) 0x2030(gdb) x/20x 0x20300x2030 <dyld__mach_header+32>: 0xa06f54a0 0x000007c8 0x00001fa2 0x00000012
0xa06f54a0是“isa”指针,0x00001fa2是指向“XXXXXX”字符串的指针.
(gdb) set {int}0x1fa2 = 0x59595959
将“XXXXXX”字符串更改为“YYYYXXXX”,然后继续进行第二个哈希调用
(gdb) cContinuing.2009-05-13 14:24:35.884 a.out[1754:813] Hash: -246144954
注意,就ObjC知道不可变字符串而言,哈希值是不同的.
我已经(de)BUG的程序是:
#import <Cocoa/Cocoa.h>int main(){ NSautoreleasePool * pool = [NSautoreleasePool new]; Nsstring * m = [Nsstring stringWithString:@"XXXXXXXXXXXXXXXXXX"]; NSLog(@"Hash: %d",[m hash]); NSLog(@"Hash: %d",[m hash]); [pool release];}总结
以上是内存溢出为你收集整理的objective-c – 是否每次计算[NSString哈希]?全部内容,希望文章能够帮你解决objective-c – 是否每次计算[NSString哈希]?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)