(今天與同事交流所學、分享給大家)
對於MRC模式下的reference count 明明對象已經釋放了、可是引用計數不爲零的情況
下面用一段代碼來說明:
NSString *str = @"FENG";
NSString *str1 = [[NSString alloc] initWithFormat:@"0000"];
NSLog(@"str1rc:%lu",str1.retainCount);
NSLog(@"strrc:%lu",str.retainCount);
這裏的引用計數輸出的是一串很大的數字,如果用有符號格式輸出,則結果是-1.
Student * stu = [[Student alloc] initsetName:@"hehe" initsetAge:19];
NSLog(@"%@:%d",stu.name,stu->age);
stu.name = @"hh";
NSLog(@"%lu",stu.retainCount);
如果是自定義的類型對象,那麼引用計數輸出是正常的1;
(自己實際操作、在arc模式下、可以在Build Phases中的Compile Sources中對應的文件加入編譯標記-fno-objc-arc即可
)
用字面量創建的變量,類似與常量,首先根據內存管理的黃金法則,
你沒有用alloc等顯式的方法是創建不需要去釋放它的引用計數,所以完全交由系統處理,
所以查看這種情況下的變量的引用計數是沒有意義的,此外,系統不會進行將計數從1減爲0的操作,
當計數爲1時,再進行計數減的操作時,系統直接將該內存標記爲可用,而不去進行減操作,主要也是爲了節省操作次數