2011-06-01 156 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