簡體   English   中英

Objective-C:為什么我的保留數不是1?

[英]Objective-C : Why is my retain count not 1?

我有一個非常簡單的程序,其中我只是創建一個對象並查看保留計數。

#import <Foundation/Foundation.h>
#import "GeometryCalculator.h"

int main (int argc, const char * argv[]) {
     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

     GeometryCalculator *calculator = [[GeometryCalculator alloc] init];
     NSLog(@"Counter: %d", [calculator retainCount]);

    [calculator release];

        [pool drain];
        return 0;  
}

我期望我的keepCount為1,但它是16863520。Class GeometryCalculator是完全空的。 沒有方法,沒有實例變量。

您正在啟用垃圾收集的情況下對此進行測試。 在垃圾回收中, retainCount的結果是不確定的,但實際上,它返回對象的指針值,因為這是最快的未定義操作(在本例中為0x1015120 )。

(Trivia:您也在32位進程中進行測試。如果它是64位進程,則由於Peter所指的截斷類型,您將獲得指針的高位字,這將是一個較低的值)

正確的類型說明符為%lu ,而不是%d retainCount方法返回NSUInteger ,它是無符號的,並且大小等於long ,實際上,它等效於unsigned long ,您可以使用%lu %dint ,它是有符號的,並且(在某些體系結構上)較短。 使用錯誤的類型說明符是獲取錯誤輸出的好方法。 因此,請查看是否可以解決該問題的解決方案。

如果沒有,那肯定是一個難題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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