使用iOS 4.1 SDK。我在UITableView的每一行中使用了2个小图像。我想知道以下哪两种方法更好,方法1也有效吗?
- (void)viewDidLoad
{
// create the images amd assign to class member variable
NSString *imgStr1 = [[NSBundle mainBundle] pathForResource:@"someImg1"
ofType:@"png"];
UIImage* img1 = [[UIImage alloc] initWithContentsOfFile:imgStr];
self.image1 = img1;
[img1 release];
NSString *imgStr2 = [[NSBundle mainBundle] pathForResource:@"someImg2"
ofType:@"png"];
UIImage* img2 = [[UIImage alloc] initWithContentsOfFile:imgStr2];
self.image2 = img2;
[img2 release];
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"cellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
cellIdentifier];
if (cell == nil)
{
//create image views here
..........................
}
/ assign images from viewDidLoad to imageView here
UIImageView *img1View = (UIImageView *)[cell viewWithTag:kImg1Tag];
[img1View setImage:self.img1];
etc....
}
或者我应该在cellForRowAtIndexPath
中执行此操作 [img1View setImage:[UIImage imageNamed:@"img1.png"];
答案 0 :(得分:1)
在这种情况下,我会使用imageNamed:
,因为它将缓存两个图像并正确响应内存警告情况。
方法一是有效的,但它与使用imageNamed:
之间几乎没有区别。如果设备需要回收内存,则将清除使用imageNamed:
创建的映像。除非你在收到内存警告时自己清除方法一中创建的图像,否则它们会留在内存中。
它也减少了你需要担心的代码,而且总是更好。减少代码==减少错误。
答案 1 :(得分:0)
我认为最简单的方法是使用UIImage
的{{1}}方法,该方法从应用包中加载图像并将其保存在缓存中。
这样你只需要在imageNamed:
方法中将单元格的UIImageView图像设置为[UIImage imageNamed:@"img1.png"]
。
另一点,如果您的单元格有很多子视图,我认为将其子类化并将不同的子视图添加为类属性会更好。然后,您只需在从cellForRowAtIndexPath:
获取它时进行投射,并且它允许您在不使用标记和每次投射的情况下修改子视图。