[英]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
。 %d
是int
,它是有符號的,並且(在某些體系結構上)較短。 使用錯誤的類型說明符是獲取錯誤輸出的好方法。 因此,請查看是否可以解決該問題的解決方案。
如果沒有,那肯定是一個難題。
看到這個... 您可以將保留計數發送到NSLog來幫助學習嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.