参数值通过Objective-C中的函数调用而损坏

参数值通过Objective-C中的函数调用而损坏,objective-c,function,arguments,Objective C,Function,Arguments,所以我似乎有一个零星的问题,到目前为止,谷歌fu还无法解决。在看似随机的点上,函数将刚刚中断,经过一些搜索之后,参数似乎将开始损坏 比如说 Object * testObject = [[Object alloc] init]; NSLog(@"ID: %d", testObject); [testFunction:testObject]; ... - (void) testFunction:(id)testObject { NSLog(@"ID: %d", testObject);

所以我似乎有一个零星的问题,到目前为止,谷歌fu还无法解决。在看似随机的点上,函数将刚刚中断,经过一些搜索之后,参数似乎将开始损坏

比如说

Object * testObject = [[Object alloc] init];
NSLog(@"ID: %d", testObject);
[testFunction:testObject];

...

- (void) testFunction:(id)testObject
{
    NSLog(@"ID: %d", testObject);
当这种情况发生时,本例中的日志语句将无法匹配,当我使用传递的引用时,会给我EXC_BAD_访问警告或其他各种问题

有时,我可以通过在函数上附加一个“伪值”来解决此问题,如下所示:

- (void) testFunction:(id)testObject:(int)dummy
{
然后这样称呼它:

[testFunction:testObject:1111];

我的函数声明在.h/.m文件中都匹配,我唯一能猜到的是,在项目的其他地方,.h文件中可能缺少相应的函数声明。但是,相关功能始终正确执行。(我有两次、三次检查等)。我知道这不是一个保留/释放问题,虽然我对Objective-C相对较新,但我已经了解了这一点,并且我还通过仪器查找泄漏,但似乎没有。有没有想过是什么原因导致了这种情况,以及为什么在更改项目中其他地方看似完全不相关的代码后会出现问题?

您的问题可能是您以错误的方式记录了对象。 当你记录一个
对象时,你不能像以前那样格式化它

当您记录任何需要精确格式化的代码时,您将得到错误的访问错误

你应该认真阅读苹果的文档,了解正确的格式

您可以在此处执行此操作:


尝试在NSLog语句中使用
%@
而不是
%d
。该问题是由多种方法引起的吗?你有没有试着用一个测试项目来重现这一点?另外,如果你在问题中加入真实的代码,那将是最好的。您发布的代码片段无效,无法帮助任何人诊断问题。请不要将objective-c中的方法和函数混为一谈,它们是非常不同的东西。
%d
用于整数值,而不是双精度值。此外,当然可以使用
%d
记录“对象”(技术上是指针),在这种情况下,相应的内存地址被格式化为十进制整数。无论指针是否指向有效对象,将指针记录为十进制整数始终有效。@bavariable:您是对的。我被纠正了。都在苹果里,博士tho:D