IOS引用計數的小細節

(今天與同事交流所學、分享給大家)
對於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時,再進行計數減的操作時,系統直接將該內存標記爲可用,而不去進行減操作,主要也是爲了節省操作次數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章