objc_msgsend when setting cell.imageView.image
<p>this code works fine until I start scrolling:</p>

<pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}

Route *r = [data routeForDay:day index:indexPath.row];
cell.textLabel.text = r.name;
cell.imageView.image = r.image;

return cell;
}
</code></pre>

<p>It works perfectly for every row until I scroll down, when it crashes with objc_msgsend on cell.imageView.image = r.image; I've confirmed that nothing is nil, I've even checked the retainCount for everything involved. I'm completely at a loss, any ideas? Thanks.</p>

<p><strong>Edit:</strong></p>

<p>I solved the problem, but do not understand how the change in code makes the bug go away, so I'd appreciate a hint if anyone knows.</p>

<p>This is how the image was initially created, in the Route init method. image became deallocated when the table was scrolled, in my tableview controller.</p>

<pre><code>NSString *imagePath = [[NSBundle mainBundle] pathForResource:[dict valueForKey:@"image"] ofType:@"png"];
image = [UIImage imageWithContentsOfFile:imagePath];
</code></pre>

<p>When I changed the second line to</p>

<pre><code>image = [[UIImage alloc] initWithContentsOfFile:imagePath];
</code></pre>

<p>it worked fine.</p>

<p>I'm just a little confused and unhappy.</p>
