1. 對于語句NSString*obj = [[NSData alloc] init]; ,編譯時和運行時obj分別是什么類型?
編譯時是NSString類型
運行時是NSData類型
2. 看下面的程序,三次NSLog會輸出什么?為什么?
NSMutableArray* ary = [[NSMutableArray array] retain];
NSString *str = [NSString stringWithFormat:@"test"];
[str retain];
[ary addObject:str];
NSLog(@"%ld", (unsigned long)[str retainCount]);
[str retain];
[str release];
[str release];
NSLog(@"%ld", (unsigned long)[str retainCount]);
[ary removeAllObjects];
NSLog(@"%ld", (unsigned long)[str retainCount]);
輸出:
-1
-1
-1
? -1代表沒有引用計數(shù)或者引用計數(shù)非常大,因為str是字符串,字符串在常量區(qū)(引用計數(shù)發(fā)生在堆區(qū)),沒有引用計數(shù)。
? 引用計數(shù)為-1,這可以理解為NSString實際上是一個字符串常量,是沒有引用計數(shù)的(或者它的引用計數(shù)是一個很大的值(使用%lu可以打印查看),對它做引用計數(shù)操作沒實質(zhì)上的影響)
詳解
.
.
.
.
.
.