检查变量是否包含内存地址

时间:2013-10-20 00:05:41

标签: objective-c ios7

我的游戏有一个接收字符串的方法。从iOS7开始,它有时会开始崩溃。

在该方法中,我在该字符串上调用lowercaseString,然后使用EXC_BAD_ACCESS崩溃。

-(void)changeDirection:(NSString *)_direction {
    if (![[direction lowercaseString] isEqualToString:[_direction lowercaseString]]) {

    }
}

我注意到的一点是,这些字符串似乎是内存地址

enter image description here

这解释了为什么它会崩溃 - 我在内存地址上调用lowercaseString

现在,最合乎逻辑的解决方案是看看为什么这个方法接收内存地址而不是实际的字符串,我想。

但是,就目前而言,我想快速解决这个问题,这导致了这个问题:

如何检测给定参数是否是@"Hello"之类的实际字符串对象  还是记忆地址?

1 个答案:

答案 0 :(得分:3)

对象存在于堆上,您调用的内容NSString实际上是指向它的指针。而指针是一个内存地址,所以预期的行为不是问题。

EXC_BAD_ACCESS表示您正以错误的方式访问内存,即您指向的内存地址无效内存。

当您尝试访问悬空指针(即指向已释放对象的指针)或未初始化指针时,可能会发生这种情况。

错误不在您发布的代码中,而是在为该方法生成_direction参数的代码中。