Я сделал приложение, которое должно работать постоянно, пока я его не остановлю. В основном он получает некоторые данные от подключенного другого устройства и периодически отправляет эти данные на сервер, используя NSURLConnection
, периодически читает данные с сервера и визуализирует эти данные в виде графика, используя NSXMLParser
.
Я запустил прибор, чтобы проверить наличие и утечки. Никакой утечки вообще. Память монитора показывает постоянство 5,2 МБ. Граф Objectalloc стабилен, чистые байты objectallo - около 480000, а #net - около 6400.
Он разбился примерно через 10 ~ 15 часов. Поэтому я добавил точку останова в malloc_error_break
.
Теперь я получаю ошибку "EXC_BAD_ACCESS
" на консоли отладчика примерно через 12 часов.
Есть идеи?
Одна подозрительная часть - это ОТПРАВКА данных.
<code>
- (void) sendDataToServerWithX:(float)x Y:(float)y{
NSAutoreleasePool *uiUpdatePool = [[NSAutoreleasePool alloc] init];
NSString *urlString = [[NSString alloc] initWithFormat:@"<a href="http://www.url.com/save_data.php?user=user1&x=%f&y=%f" rel="nofollow noreferrer">http://www.url.com/save_data.php?user=user1&x=%f&y=%f</a>", x, y];
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];<br>
if (theConnection) { NSLog(@"sending success"); }
//else { }</p>
<p>NSLog( @"data sent.");<br>
[urlString release];<br>
[theConnection release];
[uiUpdatePool drain];
}
Другая подозрительная часть - это READING data:
<code>
- (void) readCurrentDataFromServer: (NSTimer *) timer {<br>
NSAutoreleasePool *uiUpdatePool = [[NSAutoreleasePool alloc] init];
XMLParser *parser = [[XMLParser alloc] initXMLParser];<br>
NSURL *url = [[NSURL alloc] initWithString:aString];
NSXMLParser *readXmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];<br>
[readXmlParser setDelegate:parser];
[readXmlParser parse]; </p>
<p>(...) </p>
<p>[parser release];<br>
[url release];<br>
[readXmlParser release];
[uiUpdatePool drain];
}