[英]Retain count after creating NSString
我正在通過以下方法創建一個NSString類型的對象
NSString *str = [[NSString alloc] initWithString:@"aaaaaaaaaaaaaaa"];
NSLog(@"retain count == %d",[str retainCount]);
之后我只打印保留計數值
2010-10-29 17:04:03.939示例[1580:207]保留計數== 2147483647
可以任何人回答這個為什么這里的日志打印這樣的垃圾值
謝謝,
對象的絕對保留計數是沒有意義的。
您應該將release
的次數與導致保留對象的次數完全相同。 不會少(除非你喜歡泄漏),當然,沒有更多(除非你喜歡崩潰)。
有關完整詳細信息,請參閱內存管理指南
在這種特定情況下,您通過調用alloc
導致一個retain
,因此,您需要在代碼中的某個地方,任何地方調用release
(或autorelease
)。
您正在從字符串文字創建不可變的NSString對象。 字符串文字是在編譯時創建的,並在程序的整個運行時間內生效 - 因此無法取消分配,保留/釋放對它沒有影響。 為了優化(因為你的NSString無論如何都是不可變的) -initWithString:
方法只能返回傳遞給它的字符串,以便字符串文字地址分配給你的str變量。
如果您將初始化代碼更改為-initWithFormat:
那么我認為您將獲得預期的保留計數值
常量和文字有保留count = INT_MAX,它們不能被釋放,因為它們是單獨分配的,不在堆上與其他對象分配(afaik)
您的值為UINT_MAX = 0x7FFFFFFF
您可以在類中重寫此方法以實現您自己的引用計數方案。 對於永不釋放的對象(即,它們的釋放方法不執行任何操作),此方法應返回UINT_MAX,如limits.h中所定義。
它是靜態字符串,然后對象不能被dealloc。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.