Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C:为什么我的保留计数不是1?_Objective C_Cocoa_Memory Management - Fatal编程技术网

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

Objective c 目标C:为什么我的保留计数不是1?,objective-c,cocoa,memory-management,Objective C,Cocoa,Memory Management,我有一个非常简单的程序,我只需要创建一个对象并查看保留计数 #import <Foundation/Foundation.h> #import "GeometryCalculator.h" int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; GeometryCalculator *calculator =

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

#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.h”
int main(int argc,const char*argv[]{
NSAutoreleasePool*池=[[NSAutoreleasePool alloc]init];
GeometryCalculator*计算器=[[GeometryCalculator alloc]init];
NSLog(@“计数器:%d”,[calculator retainCount]);
[计算器发布];
[泳池排水沟];
返回0;
}
我希望我的重新计数是1,但它是16863520。 GeometryCalculator类完全为空。没有方法,没有实例变量。

请参见此。。。
正确的类型说明符是
%lu
,而不是
%d
retainCount
方法返回
NSUInteger
,它是无符号的,大小等于
long
——因此,实际上,它相当于
无符号long
,您可以使用
%lu
<代码>%d是
int
,它是有符号的,并且(在某些体系结构上)更短。使用错误的类型说明符是获得错误输出的好方法。所以,看看是否修正了输出


如果没有,那么这肯定是一个难题。

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


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

您的Geometry计算器是否继承自NSObject?KennyTM:如果不是,则计算器不会响应
重新计算
,消息将导致异常,而不是返回垃圾。这有什么帮助?它说的都是“是”,这甚至是错误的答案。(
retainCount
对学习没有帮助,因为它经常会产生误导。)是的,我启用了垃圾收集器。前一天我在摆弄布景,完全忘了。非常感谢!