在哪里释放/释放我的NS-mutable数组a1 ??
看到这个
- (void)viewDidLoad {
[NSThread detachNewThreadSelector:@selector(loadImage) toTarget:self withObject:nil];
}
- (void) loadImage
{
NSLog(@" THREAD METHOD");
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSUserDefaults *imgg = [NSUserDefaults standardUserDefaults];
myimg= [imgg stringForKey:@"keyToimg"];
NSLog(@"RES image sssssssss is = %@",myimg);
a1 = [[NSMutableArray alloc] init];
[a1 addObjectsFromArray:[myimg componentsSeparatedByString:@"\n\t"]];
//[a1 removeAllObjects];
////
//[myimg release];
[pool release];
}
并且在第3部分的表格单元格中显示图像
switch(indexPath.section)
{
NSString *urlE=[a1 objectAtIndex:1];
NSLog(@"url is %@",urlE);
NSData *backgroundData = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlE]];
image = [UIImage imageWithData:backgroundData];
myImageView= [[UIImageView alloc] initWithImage:image];
[myImageView setUserInteractionEnabled:YES];
CGRect rect=CGRectMake(20 ,10, 270, 180);
myImageView.frame = rect;
myImageView.tag = i;
[cell.contentView addSubview:myImageView];
}
并且基于点击图片正在改变
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@" life count %d",[myimg retainCount]);
NSLog(@" life array count %d",[a1 retainCount]);
//NSLog(@" GITSHffffffffffffffffffffffffffffffC");
NSUInteger sections = [indexPath section];
//NSLog(@"row is %d",sections);
if (sections == 3)
{ //Its either 1 or 0 I don't remember, it's been a while since I did some tableview
if(tap<[a1 count]-1) {
NSLog(@" life array count %d",[a1 retainCount]);
tap++;
NSString *sa=[a1 objectAtIndex:tap];
//////////////////////
image= [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat: sa,[a1 objectAtIndex:tap ]]]]];
NSData *imageData = [NSData dataWithData:UIImageJPEGRepresentation(image, 1.0)];
myImageView.image = image;
//[myimg release];
//[a1 release];
}
else {
tap=1;
//[myimg release];
//[a1 release];
}
}
//[a1 release];
}
那么我应该在哪里发布 my a1和myimg
答案 0 :(得分:1)
而不是:
a1 = [[NSMutableArray alloc] init];
[a1 addObjectsFromArray:[myimg componentsSeparatedByString:@"\n\t"]];
考虑:
a1 = [NSMutableArray arrayWithArray:[myimg componentsSeparatedByString:@"\n\t"]];
这将使用自动释放的NSMutableArray对象初始化你的a1,然后你不必担心手动释放它。
我不知道的是你的[pool release]
是否会释放它,但是......我真的更喜欢你不把这个行业放在后台线程中,而是使用异步网络方法来获取你的图像数据。
顺便说一句,在我学习iPhone开发的过程中,我经历了三到四个关于后台网络的“aha时刻”。其中一个与在后台线程上运行选择器有关。这持续了大约一个星期,直到我发现了ASIHttpRequest,这就是我现在的做法。将网络交互放在后台更简单的方法,而不必弄乱线程或任何废话。见http://allseeing-i.com/ASIHTTPRequest/
如果你查看我的答案,每次HTTP客户端网络出现时我都推荐ASI。我真的不是故意为它做点什么 - 它让我的生活变得如此简单,我认为每个人都需要了解它。
答案 1 :(得分:0)
永远不会使用此代码发布a1。 你应该把它放在一个成员变量上,或者在init之后添加autorelease。
顺便说一下,将myImageView添加到单元格视图后,应该将其释放。 这可能是因为保留/释放逻辑:当你分配myImageView时,保留计数为+1,一旦你将它添加到单元格视图,它现在是+2,你应该释放它,以便保留返回到+ 1然后当进一步释放单元格视图时,它会将保留计数减少到0。
最后一个函数
中变量图像的逻辑相同此致 Meir assayag