【发布时间】:2012-02-01 09:58:19
【问题描述】:
我提供了有关代码的更多信息。 checkstatusthread() 每 5 秒调用一次。下面使用的ipItemsArray 对象存储来自服务器的 XML。
// 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];
}
当我在 Xcode 4.2 中运行泄漏工具时,NSArray *ipItemsArray = [playlistdata componentsSeparatedByString:@"|^|"]; 行给了我内存泄漏。已经尝试了所有可能的事情,但觉得需要添加一些东西。谁能帮帮我。
这是泄漏对象的屏幕截图。我还注意到我的应用没有调用 Dealloc 方法。
【问题讨论】:
-
完成后你会发布 playlistdata 和 hostStr2 吗?
-
为什么要保留两次身份?
-
我已删除状态保留行之一。那是错误打印的。
-
我使用自动引用计数来自动管理对象,就像我使用 XCode 4.2 一样。我的问题解决了,没有泄漏。我不确定这在旧版本的 iOS 上是否可以正常工作,以及它是否会得到 Apple 的批准。
标签: iphone xcode memory-leaks nsmutablearray