没有指针使用ARC?

时间:2011-12-24 13:35:52

标签: objective-c uiimageview properties

我开始了一个新项目,我选择使用ARC,但我有一个非常奇怪的问题。 我有一个UITableViewCell的子类,它有两种尺寸,具体取决于用户是否长时间按下单元格。 当大小改变时,它显示具有不同背景的细胞的另一部分,其部分地与实际细胞背景重叠。 为此,我有一个属性@property(强,非原子,保留)UIImageView * optionsImageView; 我尝试了不同的东西,但它们都导致相同的结果,所以我只是解释实际编码的那个。 在init方法中,我创建optionsImageView并将其作为flollows添加到self:

UIImage* image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"sous_menu" ofType:@"png"]];
    self.optionsImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 
                                                                          self.frame.size.height - 12, 
                                                                          self.frame.size.width, 
                                                                          image.size.height)];
    optionsImageView.backgroundColor = [UIColor clearColor];
    optionsImageView.image = image;
    [self insertSubview:optionsImageView aboveSubview:self.backgroundView];  
    optionsImageView.alpha = 0;

当用户长按单元格时,我会更改optionsImageView的alpha。 但是当我在layoutSubviews方法中检查它时,optionImageView是nil,我班级的其他成员也是。

#pragma mark - ACTIONS
- (void)hideOptionsPanel
{
    NSLog(@"hideOptionsPanel for %@", titleLabel.text);
    self._cellOptions = LRCellOptionsHidden;
    NSLog(@"_cellOptions %d", self._cellOptions);
    self.optionsImageView.alpha = 0;
}

- (void)showOptionsPanel
{
    NSLog(@"showOptionsPanel for %@", titleLabel.text);
    self._cellOptions = LRCellOptionsShown;
    NSLog(@"_cellOptions %d (optionsImageView %@)", self._cellOptions, optionsImageView);
    self.optionsImageView.alpha = 1;
}

- (void)layoutSubviews
{
    NSLog(@"layoutSubviews for %@ (%d)", titleLabel.text, self._cellOptions);
    // rounded corners
    self.icon.layer.cornerRadius = 5.0;
    self.icon.clipsToBounds = YES;
}

这是所有这一切的ouptput ....

2011-12-24 14:11:31.788 LendReminder[11189:fb03] layoutSubviews for Cars 2 Bluray (0)
2011-12-24 14:11:32.137 LendReminder[11189:fb03] showOptionsPanel for Cars 2 Bluray
2011-12-24 14:11:32.138 LendReminder[11189:fb03] _cellOptions 1 (optionsImageView (null))
2011-12-24 14:11:32.140 LendReminder[11189:fb03] layoutSubviews for Cars 2 Bluray (0)
2011-12-24 14:11:32.141 LendReminder[11189:fb03] layoutSubviews for Cars 2 Bluray (0)
2011-12-24 14:11:33.442 LendReminder[11189:fb03] layoutSubviews for Sleepy Hollow (0)
2011-12-24 14:11:33.790 LendReminder[11189:fb03] hideOptionsPanel for Cars 2 Bluray
2011-12-24 14:11:33.791 LendReminder[11189:fb03] _cellOptions 0
2011-12-24 14:11:33.793 LendReminder[11189:fb03] showOptionsPanel for Sleepy Hollow
2011-12-24 14:11:33.793 LendReminder[11189:fb03] _cellOptions 1 (optionsImageView (null))
2011-12-24 14:11:33.796 LendReminder[11189:fb03] layoutSubviews for Sleepy Hollow (0)
2011-12-24 14:11:33.796 LendReminder[11189:fb03] layoutSubviews for Cars 2 Bluray (0)
2011-12-24 14:11:33.797 LendReminder[11189:fb03] layoutSubviews for Sleepy Hollow (0)

你可以看到在showOptionsPanel和HideOptionPanel中,选项Enum是正常的,而在layoutSubviews中,它仍然等于0并且optionView是nil ... 我勒个去?这是与ARC有什么关系吗? THX。

1 个答案:

答案 0 :(得分:1)

我明白了;)) 我没有在xib中设置reuseIdentifier,所以每次调用cellAtIndexPath时,都会重建单元格,因此没有指针。我知道了:D:D:D