代码之家  ›  专栏  ›  技术社区  ›  TalkingCode

目标C:为什么我的保留计数不是1?

  •  0
  • TalkingCode  · 技术社区  · 14 年前

    我有一个非常简单的程序,我只需要创建一个对象并查看retain计数。

    #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;  
    }
    

    GeometryCalculator类完全为空。没有方法,没有实例变量。

    3 回复  |  直到 14 年前
        1
  •  7
  •   Jens Ayton cdespinosa    14 年前

    retainCount 在垃圾收集下未定义,但实际上,它返回对象的指针值,因为这是最快的未定义操作(在本例中, 0x1015120

    (琐事:您也在32位进程中进行测试。如果它是一个64位进程,您会得到指针的高位字,因为Peter引用了类型截断,这将是一个较低的值。)

        2
  •  3
  •   Peter Hosey    14 年前

    正确的类型说明符是 %lu %d . 这个 retainCount 方法返回 NSUInteger long unsigned long ,您使用 . int ,它是有符号的并且(在某些体系结构上)较短。使用错误的类型说明符是获得错误输出的好方法。所以,看看修复它是否能纠正输出。

    如果没有,那么这肯定是个谜。