簡體   English   中英

創建NSString后保留計數

[英]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

可以任何人回答這個為什么這里的日志打印這樣的垃圾值

謝謝,

不要使用-retainCount。

對象的絕對保留計數是沒有意義的。

您應該將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM