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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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中?_Objective C_Variables_Types_Void - Fatal编程技术网

Objective c 如何检查变量是否为“类型”;“无效”;在目标C中?

Objective c 如何检查变量是否为“类型”;“无效”;在目标C中?,objective-c,variables,types,void,Objective C,Variables,Types,Void,情况就是这样。我忘了在方法末尾返回nil,并在下面的代码中导致了错误的访问错误 - (NSString*) testWithRet{ NSString* ret = @"js"; //return ret; } 我的问题是,我能在坏访问发生之前做任何检查吗 我试着对照nil和NULL检查“var”,但失败了 谢谢。不,你不能做这样的检查:让一个返回值的函数在没有返回的情况下结束是未定义的行为,在这种情况下返回的值是未定义的 您需要注意Xcode中的警告,并将其全部修复。在这种

情况就是这样。我忘了在方法末尾返回nil,并在下面的代码中导致了错误的访问错误

- (NSString*) testWithRet{
    NSString* ret = @"js";
    //return ret;
}

我的问题是,我能在坏访问发生之前做任何检查吗

我试着对照nil和NULL检查“var”,但失败了


谢谢。

不,你不能做这样的检查:让一个返回值的函数在没有返回的情况下结束是未定义的行为,在这种情况下返回的值是未定义的

您需要注意Xcode中的警告,并将其全部修复。在这种情况下,你应该得到一条信息,上面写着

控件到达非void函数的末尾

在非void函数的右大括号上。这应该是您向代码中添加缺少的
返回的信号。

请检查:

NSString* var = [obj testWithRet];
//can I check here to prevent the bad access below?
if([var isKindOfClass:[NSString class]]) {
    NSLog(@"%@", var); // bad access here
}

有趣。坦白说,我不知道。另一方面,让它发生不是更好吗?这是我宁愿修复的根本原因,而不是事后检查。编译器没有抱怨没有返回值吗?是的。Xcode给我一个警告“控件到达非void函数的末尾”。然而,情况是,我正在编写一个供其他人使用的库。如果我可以提供任何消息给用户进行调试,那就更好了。谢谢。调用函数/方法将从堆栈中获取一些不可预测的地址。这很可能不是0。因此,检查nil将不起作用。我能想到的所有其他检查都必须访问该对象。访问它可能会导致内存冲突或某些不可预测的结果@Dukeland,尤其是当你正在开发一个应该在其他程序中使用的库时,你应该渴望摆脱所有的警告!不,这条线路上有“坏通道”。if([var iskindof类:[NSString类]]){这肯定会失败。即使-在最不可能的情况下-var包含一个NSString对象,那么它肯定不是调用方想要获取的对象。@HermannKlecker我不明白你的意思。在mac应用程序上复制同样的情况,你可以看到上面的解决方案是有效的。请,制作(至少一些)将您的警告设置为错误。这将完全防止这种情况发生。
NSString* var = [obj testWithRet];
//can I check here to prevent the bad access below?
if([var isKindOfClass:[NSString class]]) {
    NSLog(@"%@", var); // bad access here
}