gpt4 book ai didi

objective-c - 什么是 nil,但插入 NSMutableDictionary 时不是 nil

转载 作者:搜寻专家 更新时间:2023-10-30 20:08:50 25 4
gpt4 key购买 nike

我在 iPhone 6、iOS 8.3 上遇到了一些奇怪的行为。

appVersion 是传入的 NSString* 参数。

  NSLog(@"A:%@:%d",appVersion,(int)appVersion.length);
if (!appVersion)
NSLog(@"a");
if (appVersion == 0)
NSLog(@"b");
if (appVersion == nil)
NSLog(@"c");
if (appVersion == NULL)
NSLog(@"d");
if (appVersion == Nil)
NSLog(@"e");
if ([appVersion isEqual:[NSNull null]])
NSLog(@"f");

NSString* av = [NSString stringWithFormat:@"%@",appVersion];
if ([av isEqualToString:@"(null)"])
NSLog(@"g");
if (((int)appVersion) == 0)
NSLog(@"h");

if (appVersion) {
NSLog(@"B:%@:%d",appVersion,(int)appVersion);
params[@"appversion"] = appVersion;
}

应用的发布版本返回:

A:(null):0
g
h
B:(null):0

然后崩溃('object cannot be nil (key: appversion)')。

调试构建返回:

a
b
c
d
e
g
h

什么是零,又不是零?

最佳答案

我正在处理一些遗留代码,但没有注意到 .h 和 .m 文件之间的方法签名存在差异。

.h 文件有:

- (void) verifyWinner:(NSString*)baseAcctId
appVersion:(NSString*)appVersion
onComplete:(OnCompleteWinnerVerifier)onComplete __attribute__((nonnull));

我猜最初的开发者想阻止 onComplete 被设置为 nil。但是,由于某些原因,__attribute__((nonnull)) 与每个参数相关联。

由于 __attribute__ 标记,XCode 正在优化发布版本的所有 != nil 检查,从而导致崩溃。

这个问题现在才出现在 XCode 6.3 中。因此,也许 Apple 最近添加了优化,或者在 6.3 中引入了一个错误,该错误将 __attribute__ 与每个参数相关联,而不仅仅是它旁边的参数(无论如何出于优化目的)。

关于objective-c - 什么是 nil,但插入 NSMutableDictionary 时不是 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29720929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com