2015-04-05 60 views
-3

我正在做一些簡單的retaincount測試,我得到的是-1。關於iOS中的保留數量?

例如,

NSString *s1 = [[NSString alloc] init]; 
    NSLog(@"s1 Retain Count = %d",[s1 retainCount]); 

    NSString *s2 = [NSString string]; 
    NSLog(@"s2 Retain Count = %d",[s2 retainCount]); 

我想知道是否有無論如何讓內部retaincount?

+4

http://whentouseretaincount.com – vikingosegundo 2015-04-05 09:59:26

+0

另請參閱http://stackoverflow.com/questions/4636146/when-to-use-retaincount。 – 2015-04-05 10:18:56

回答

0

Take a look at the Apple Doc's..

宣言目的-C - (NSUInteger)retainCount返回值的接收器的引用計數。

特殊注意事項在調試內存 管理問題時,此方法沒有任何價值。因爲任何數量的框架對象可能保留一個對象以保存對它的引用,而在 的同一時間,自動釋放池可能在對象上保存任意數量的延遲 版本,所以很可能無法獲得有用的 來自此方法的信息。

要了解內存管理的基本規則,您必須遵守 ,請閱讀內存管理策略。要診斷內存管理 的問題,請使用合適的工具:

即使在運行程序之前,Clang靜態分析器通常會發現內存管理問題 。

儀器應用程序中的對象Alloc儀器(請參見儀器用戶指南 )可以跟蹤對象分配和破壞。

3
NSLog(@"s1 Retain Count = %lu",(unsigned long)[s1 retainCount]); 

如果你使用正確的格式說明 - 警告應該告訴你這樣做 - 你會看到

retaincoundt[11169:438727] s1 Retain Count = 18446744073709551615 
retaincoundt[11169:438727] s2 Retain Count = 18446744073709551615 

或2 - 1 - > NSUIntegerMax上64位系統。你正在尋找一個不斷的對象。編譯器通過指向同一個永恆不變的對象來確定優化的空間。

這樣的事情可能在任何時候發生或不發生。你不能也不應該依靠retainCount