我已經提供了有關代碼的更多信息。每5秒後調用一次checkstatusthread()
。 ipItemsArray
下面使用的對象存儲來自服務器的XML。使用NSMutableArray的另一個內存泄漏
// XMLAppDelegate.h
@interface XMLAppDelegate : NSObject <UIApplicationDelegate> {
NSMutableString *hostStr2;
NSData *dataURL2;
NSString *playlistdata;
}
@property (nonatomic, retain) NSMutableString *hostStr2;
@property (nonatomic, retain) NSData *dataURL2;
@property (nonatomic, retain) NSString *playlistdata;
@end
// XMLAppDelegate.m
-(void)checkstatusthread
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
hostStr2 = [[NSMutableString alloc] initWithFormat:@"http://%@/getplaylist.php?ip=%@",yourip,restip];
dataURL2 = [NSData dataWithContentsOfURL: [ NSURL URLWithString: hostStr2 ]];
playlistdata = [[NSString alloc] initWithData:dataURL2 encoding: NSASCIIStringEncoding];
ipItemsArray = [playlistdata componentsSeparatedByString:@"|^|"];
[hostStr2 release];
[playlistdata release];
status =[ipItemsArray objectAtIndex:0];
[status retain];
if([[ipItemsArray objectAtIndex:0]isEqualToString:@"0001"])
{
serverOutput1 =[ipItemsArray objectAtIndex:1];
[serverOutput1 retain];
nowplaying =[ipItemsArray objectAtIndex:2];
[nowplaying retain];
tracklocation=[ipItemsArray objectAtIndex:3];
[requestlocation retain];
requestlocation=[ipItemsArray objectAtIndex:4];
temp_app =[tracklocation intValue];
}
[serverOutput1 retain];
[nowplaying retain];
[serverOutput1 retain];
[nowplaying retain];
[tracklocation retain];
[requestlocation retain];
// checkstatus() called
[self performSelectorOnMainThread:@selector(checkstatus)
withObject:nil
waitUntilDone:false];
[pool drain];
}
- (void)dealloc {
[dataURL2 release];
[playlistdata release];
[ipItemsArray release];
}
線NSArray *ipItemsArray = [playlistdata componentsSeparatedByString:@"|^|"];
給我,當我運行在Xcode 4.2泄漏儀器內存泄漏。已經嘗試過所有可能的事情,但覺得需要添加一些東西。有人能幫助我嗎?
下面是泄漏對象的屏幕截圖。另外我注意到我的應用程序不調用Dealloc方法。
當你完成時你是否發佈了playlistdata和hostStr2? – 2012-01-03 10:56:19
@ ShantiK:是的。 – maddy2012 2012-01-04 12:37:09
你爲什麼保留兩次狀態? – 2012-01-05 05:36:33