Objective c 目标C,内存泄漏?
你们看到内存泄漏了吗?我调用了NSXML委托方法,它基本上将“Question”的一个实例放入了NSMutableArray中。我检查了仪器,在分析它时发现内存泄漏。但我不明白为什么…Objective c 目标C,内存泄漏?,objective-c,Objective C,你们看到内存泄漏了吗?我调用了NSXML委托方法,它基本上将“Question”的一个实例放入了NSMutableArray中。我检查了仪器,在分析它时发现内存泄漏。但我不明白为什么…currentElement=[elementName copy] 请阅读文档中的副本API说明。有人提到 此方法在返回新对象之前保留该对象。但是,方法的调用方负责释放返回的对象。currentElement=[elementName copy] 请阅读文档中的副本API说明。有人提到 此方法在返回新对象之前保留该
currentElement=[elementName copy]代码>
请阅读文档中的副本
API说明。有人提到
此方法在返回新对象之前保留该对象。但是,方法的调用方负责释放返回的对象。
currentElement=[elementName copy]代码>
请阅读文档中的副本
API说明。有人提到
此方法在返回新对象之前保留该对象。但是,方法的调用方负责释放返回的对象。
currentElement---在解析流中没有得到释放。。。其余的代码看起来是正确的currentElement---在您的解析流中没有被释放。。。代码的其余部分看起来是正确的您确实需要包含属性声明,以便人们能够有把握地回答内存管理问题(因为属性定义了内存的管理方式),但假设所有保留
属性:
currentElement
似乎从未被释放
文本
似乎永远不会发布
self.post
被分配[[Question alloc]init]
的结果。该方法的结果已经是您拥有的对象,并且post
setter再次保留它。在方法退出之前,应按照以下步骤释放:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict{
//currentElenet is NSString
currentElement = [elementName copy];
if ([elementName isEqualToString:@"struct"]) {
self.post = [[Question alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if ([currentElement isEqualToString:@"string"]) {
post.text = [NSString stringWithFormat:@"%@ %@", post.text, string];
}
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"struct"]) {
[conversations addObject:post];
[post release];
post = nil;
}
}
//Question.m file
@synthesize text
-(id)init{
self = [super init];
if (self == nil) {
}
else {
//declared as retain in .h file
text = [[NSString alloc]initWithString:@""];
}
return self;
}
-(void)dealloc{
[super dealloc];
[title release];
}
(它也应该在dealloc
中释放,或者在您使用它来平衡setter时释放)
您确实需要包含属性声明,以便人们能够有把握地回答内存管理问题(因为属性定义了内存的管理方式),但假设所有保留
属性:
currentElement
似乎从未被释放
文本
似乎永远不会发布
self.post
被分配[[Question alloc]init]
的结果。该方法的结果已经是您拥有的对象,并且post
setter再次保留它。在方法退出之前,应按照以下步骤释放:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict{
//currentElenet is NSString
currentElement = [elementName copy];
if ([elementName isEqualToString:@"struct"]) {
self.post = [[Question alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if ([currentElement isEqualToString:@"string"]) {
post.text = [NSString stringWithFormat:@"%@ %@", post.text, string];
}
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"struct"]) {
[conversations addObject:post];
[post release];
post = nil;
}
}
//Question.m file
@synthesize text
-(id)init{
self = [super init];
if (self == nil) {
}
else {
//declared as retain in .h file
text = [[NSString alloc]initWithString:@""];
}
return self;
}
-(void)dealloc{
[super dealloc];
[title release];
}
(它也应该在dealloc
中释放,或者在您使用它来平衡setter时释放)