在编写了多年的Objective-C代码后,(遗憾的是:-()我今天感到很困惑。还有太多东西需要学习。请看下面的代码片段:
NSString *string1 = @"A string";
char cString[] = "A string";
NSString *string2 = [[NSString alloc] initWithCString:cString encoding:NSUTF8StringEncoding];
NSString *string3 = [[NSString alloc] initWithBytes:cString length:sizeof(cString) encoding:NSUTF8StringEncoding];
NSLog(@"String Pointers:\nstring1: %p\nstring2: %p\nstring3: %p\n\n", string1, string2, string3);
NSLog(@"String Hashes:\nstring1: %lu\nstring2: %lu\nstring3: %lu\n\n", string1.hash, string2.hash, string3.hash);
NSNumber *number1 = @1;
NSNumber *number2 = [[NSNumber alloc] initWithInt:1];
NSNumber *number3 = [[NSNumber alloc] initWithInteger:1];
NSLog(@"Number Pointers:\nnumber1: %p\nnumber2: %p\nnumber3: %p\n\n", number1, number2, number3);
NSLog(@"Number Hashes:\nnumber1: %lu\nnumber2: %lu\nnumber3: %lu\n\n", number1.hash, number2.hash, number3.hash);
以下输出:
2017-10-25 23:55:24.572 ObjC[29888:303] String Pointers:
string1: 0x1000010a0
string2: 0x100109930
string3: 0x10010bcb0
2017-10-25 23:55:24.574 ObjC[29888:303] String Hashes:
string1: 10100169157824900864
string2: 10100169157824900864
string3: 8311704865341864449
2017-10-25 23:55:24.574 ObjC[29888:303] Number Pointers:
number1: 0x187
number2: 0x187
number3: 0x1c7
2017-10-25 23:55:24.575 ObjC[29888:303] Number Hashes:
number1: 2654435761
number2: 2654435761
number3: 2654435761
我有以下问题:
string1
是否已静态分配,其他对象(string2
,string3
,number1
,number2
和number3
)是否已动态分配? number1
,number2
具有相同的指针地址,如果它们都是动态分配但number3
不相同? (它们都代表一个值为1的数字对象。)-isEqual:
方法时会发生什么?是指针比较还是哈希?或者取决于对象的类型? (仅限于Foundation对象。)谢谢!