2011-06-01 159 views
0

Imagepair对象是其他类的成员变量..每次调用getImageURLs函数(请求网页并分析其元素)时,我都希望更改其成员。它第一次工作正常,但如果我第二次在同一个对象上调用该函数,应用程序崩溃并给我留下一个EXC_BAC_ACCESS异常。我的猜测是,我在内存管理方面做了一些错误,但我无法弄清楚什么,因为我有Java背景,并且不习惯手动进行内存管理。异常类型:EXC_BAD_ACCESS(SIGBUS)

@implementation Imagepair 

@synthesize imageLeft; 
@synthesize imageRight; 
@synthesize imageURLLeft; 
@synthesize imageURLRight; 
@synthesize idLeft; 
@synthesize idRight; 

//get random imagepair link 
- (void) getImageURLs{ 
    NSLog(@"Get random imagepair from server"); 

NSError *error = nil; 

NSURL *url = [NSURL URLWithString:cSERVER_GET_RANDOM_IMAGE]; 
ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:url]; 
[request startSynchronous]; 

//init HTML-parser 
HTMLParser *parser = [[HTMLParser alloc] initWithString: [request responseString] error:&error]; 

//check for error 
if (error) { 
    NSLog(@"Error: %@", error); 
} 

//get body-node 
HTMLNode *bodyNode = [parser body]; 

//get all link-nodes 
HTMLNode *success = [bodyNode findChildTag:@"success"]; 
HTMLNode *imgurl1 = [success findChildTag:@"imgurl1"]; 
HTMLNode *imgurl2 = [success findChildTag:@"imgurl2"]; 
HTMLNode *imgid1 = [success findChildTag:@"imgid1"]; 
HTMLNode *imgid2 = [success findChildTag:@"imgid2"]; 
HTMLNode *imgvotes1 = [success findChildTag:@"imgvotes1"]; 
HTMLNode *imgvotes2 = [success findChildTag:@"imgvotes2"]; 

//read content and set members 
[self setImageURLLeft:[imgurl1 contents]]; 
[self setImageURLRight:[imgurl2 contents]]; 
votesLeft = [[imgvotes1 contents] intValue]; 
votesRight = [[imgvotes2 contents] intValue]; 
[self setIdLeft:[imgid1 contents]]; 
[self setIdRight:[imgid2 contents]]; 
[self setImageLeft:[self requestImage:imageURLLeft]]; 
[self setImageRight:[self requestImage:imageURLRight]]; 

[request release]; 
[parser release]; 
} 

//returns an UIImage for an URL 
-(UIImage *)requestImage:(id)url{  
    NSURL *imgURL = [NSURL URLWithString:url]; 
    NSData *data = [NSData dataWithContentsOfURL:imgURL]; 
    UIImage *image = [[UIImage alloc] initWithData:data]; 
    return image; 
    } 
} 
+1

我们需要知道如何定义各种@属性(分配,保留,复制等)。如果可以,也张贴堆栈跟踪。 – NSGod 2011-06-01 12:48:25

+0

发现问题,是在另一个类中,我发布了一个对象,它在一个autorelease池中。谢谢苹果提出这样的解释错误消息:/ – dschihejns 2011-06-01 14:40:45

回答

3

requestImage:你初始化UIImage但从来没有松开。请将return image更改为return [image autorelease]或将该方法重命名为newRequestImage:,以便很明显它会返回保留的图像。

+0

谢谢,我忘了这一点。 – dschihejns 2011-06-01 14:41:08