Пожалуйста, смотрите обновление ниже
<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 , но еще не определили его. Это не вопрос «Отладка моей программы для меня». У меня вопрос просто - кто-нибудь сталкивался с этой проблемой с возвращаемым типом массива байтов base64Binary, сгенерированным wsdl2objc?
Обновление
Проблема, в которую я верю, заключается в
+ (id)dateWithBase64EncodedString;
в NSData (MBBase64) -
char *data = malloc(...);
NSUInteger length = 0;
... // fill data[length++];
realloc(data, length);
return [NSData dataWithBytesNoCopy:bytes length:length]; //offending line?
Я делаю предположение, что это не заставляет время выполнения target-c требовать память .. поэтому, когда я освобождаю NSData, он каким-то образом все еще выделяется с помощью 'malloc'. Кто-нибудь знает лучше меня?