我有一个关于在objective-c中分配对象的超级noob问题。我基本上正在尝试创建一个缩略图数组来使用。我从另一篇文章中获得了这段代码。
+ (UIImage *)scale:(UIImage *)image toSize:(CGSize)size
{
UIGraphicsBeginImageContext(size);
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
在我的viewDidLoad中,我这样做:
// Create thumbnail images to be used in UITableView.
NSMutableArray *imageArray = [[NSMutableArray alloc] initWithCapacity:[_list count]]; // list is an array that has my data
for (id *test in _list) {
UIImage *cardImage = [UIImage imageNamed:test.ImageFile]; // line 1
cardImage = [UIImage scale:cardImage toSize:CGSizeMake(50, 50)]; // line 2
[imageArray addObject:cardImage]; // line 3
}
self.List = imageArray;
[imageArray release];
我的问题是关于for循环内部。这是我对它是如何工作的理解,如果我错了,请纠正我。
第1行创建一个名为cardImage的自动释放UIImage。
第2行从scale:toSize:方法创建另一个UIImage。 (我不确定这个UIImage是否是自动释放的)。 cardImage现在指向第2行创建的新UIImage,稍后将清除第1行中自动释放的UIImage。
第3行将新对象添加到imageArray。
我不确定这是对还是错/好/坏等等。我知道一种方法中的原始类型,你可以做到
int x = 5;
x = 10;
但是我不确定我是否在这里创建内存泄漏,如果有更好的方法。非常感谢!
答案 0 :(得分:2)
+ (UIImage *)scale:(UIImage *)image toSize:(CGSize)size
{
...
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
...
return scaledImage;
}
UIGraphicsGetImageFromCurrentImageContext会返回自动释放的图片,scale:toSize:
也是如此。因此,你的循环不会泄漏。
您的第一个线索可能是名称:scale:toSize:
。根据{{3}},只有名称以" alloc"," new"," copy"或" mutableCopy"返回您拥有的对象。其他方法返回您不拥有的对象。