我有一个非常简单的程序,其中我只是创建一个对象并查看保留计数。

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


我期望我的retainCount为1,但它是16863520。
类GeometryCalculator完全为空。没有方法,没有实例变量。

最佳答案

您正在启用垃圾收集的情况下对此进行测试。 retainCount的结果在垃圾回收中是不确定的,但实际上,它返回对象的指针值,因为这是最快的未定义操作(在本例中为0x1015120)。

(Trivia:您也在32位进程中进行测试。如果它是64位进程,则由于Peter所指的截断类型,您将获得指针的高位字,这将是一个较低的值)

关于objective-c - Objective-C:为什么我的保留数不是1?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3270655/

10-13 06:31