NSObject * obj1 = [[NSObject alloc] init];
NSLog(@"%d", [obj1 retainCount]);
NSString * string1 = [[NSString alloc] init];
NSLog(@"%d", [string1 retainCount]);
你能猜出结果吗?天啊,这是“1 -1”!那很奇怪!
答案 0 :(得分:2)
答案 1 :(得分:-1)
这里重点是你分配的任何字符串和init表单将返回相同的对象。它与创建NSNull相同。空字符串是常量,并且始终是同一个对象。
试试这个:
NSString * string1 = [[NSString alloc] init] ;
NSLog(@"%d %u", [string1 retainCount], string1);
NSString * string2 = [[NSString alloc] init];
NSLog(@"%d %u", [string2 retainCount], string2);
NSNull * theNULL = [NSNull null];
NSLog(@"%d %u", [theNULL retainCount], theNULL);
NSNull * theNULL2 = [[NSNull alloc] init];
NSLog(@"%d %u", [theNULL2 retainCount], theNULL2);
string1和string2是相同的值,因此两者都指向空字符串。同样适用于NSNull。
这种行为解释了为什么每个init方法都以self = [super init]开头,因为init可以在null字符串或NULL对象的情况下改变self。