gpt4 book ai didi

ios 6 和 7 不返回相同的结果

转载 作者:可可西里 更新时间:2023-11-01 04:39:32 26 4
gpt4 key购买 nike

看来我们使用 getPropertyType(..) 的应用程序在 ios7 下失败了。无论出于何种原因,getPropertyType(..) 在例如 NSString 属性上返回 NSString$'\x19\x03\x86\x13 作为类型,而不仅仅是 NSString,而且它返回的不是 NSNumber NSNumber\xf0\x90\xae\x04\xff\xff\xff\xff。当我稍后检查特定类型时,所有这些都会导致一些棘手的问题。我已将此(遗留?)代码更改为使用 isKindOfClass,但令我困扰的是我不明白这里发生了什么。

有问题的代码:

#import <objc/runtime.h>

static const char *getPropertyType(objc_property_t property) {
const char *attributes = property_getAttributes(property);
char buffer[1 + strlen(attributes)];
strcpy(buffer, attributes);
char *state = buffer, *attribute;
while ((attribute = strsep(&state, ",")) != NULL) {
if (attribute[0] == 'T') {
return (const char *)[[NSData dataWithBytes:(attribute + 3) length:strlen(attribute) - 4] bytes];
}
}
return "@";
}

这到底是怎么回事,为什么结果不一样??

最佳答案

getPropertyType 返回的缓冲区不是 NULL 终止的。我认为它曾经奏效只是运气不好。此外,返回由新创建的 NSData 指向的数据不能保证在该函数返回后工作。

我会让它返回一个 NSString。

NSString* getPropertyType(objc_property_t property) {
const char *attributes = property_getAttributes(property);
char buffer[1 + strlen(attributes)];
strcpy(buffer, attributes);
char *state = buffer, *attribute;
while ((attribute = strsep(&state, ",")) != NULL) {
if (attribute[0] == 'T') {
return [[NSString alloc] initWithBytes:attribute + 3 length:strlen(attribute) - 4 encoding:NSASCIIStringEncoding];
}
}
return @"@";
}

这假设 ARC。

关于ios 6 和 7 不返回相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18901776/

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