【发布时间】:2011-06-20 21:29:14
【问题描述】:
请看下面的更新
<s:element name="GetFile">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="User" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="Password" type="s:string />
<s:element minOccurs="0" maxOccurs="1" name="ObjectId" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetFileResponse">
<s:complexType>
<s:sequence>
<!-- This is the return value -->
<s:element minOccurs="0" maxOccurs="1"
name="GetFileResult" type="s:base64Binary"/>
</s:sequence>
</s:complexType>
</s:element>
使用从 wsdl2objc 生成的代码,我得到一个启用保护 malloc 的错误:
GuardMalloc[eBridge-1115]:守卫 malloc 区域失败:释放指针 我们没有分配那不是 被任何注册区域声明
GuardMalloc[eBridge-1115]:显式 陷入调试器!!!
这是我能看到的最后一个 obj-c 代码,在它全部变成 asm 之前:
@implementation WebServices_GetFileResponse
- (void)dealloc
{
[soapSigner release];
//breaks on the line below
if(GetFileResult != nil) [GetFileResult release];
[super dealloc];
}
我相信它在生成的 Response 对象的 deserializeElementsFromNode 中出现问题,但尚未查明。这不是“为我调试我的程序”问题。我的问题很简单——有没有人遇到过由 wsdl2objc 生成的 base64Binary 字节数组返回类型的问题?
更新
我认为问题出在
+ (id)dateWithBase64EncodedString;
在 NSData (MBBase64) -
char *data = malloc(...);
NSUInteger length = 0;
... // fill data[length++];
realloc(data, length);
return [NSData dataWithBytesNoCopy:bytes length:length]; //offending line?
我假设这不会使 Objective-c 运行时要求内存..所以当我释放 NSData 时,它仍然以某种方式分配有“malloc”。有谁比我更了解?
【问题讨论】:
标签: iphone ios web-services wsdl base64