请参阅下面的更新
<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生成的代码,启用了guard malloc时出错:
GuardMalloc [eBridge-1115]:守卫 malloc区域失败:释放指针 我们没有分配那不是 任何注册地区声称的 GuardMalloc [eBridge-1115]:明确地说 陷入调试器!!!
这是我在看到它之前可以看到的最后一个obj-c代码:
@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'进行分配。有没有人比我知道的更好?
答案 0 :(得分:2)
在+(id)dateWithBase64EncodedString中我将最后一行改为:
return [NSData dataWithBytesNoCopy:bytes length:length **freeWhenDone:NO**];
它似乎有效。这只是我的黑客攻击,但如果你是wsdl2objc的作者,希望这会有所帮助。