Ios UIView的getter和setter

Ios UIView的getter和setter,ios,uiview,uiimageview,setter,getter,Ios,Uiview,Uiimageview,Setter,Getter,在myUIViewsubclass.h中: @interface MyView : UIView @property (nonatomic, strong) UIImageView *imageView; @end 我正在我的UIView子类上设置UIImageView,如下(init方法): 因此,我可以执行myView.imageView.image=[UIImage someImage]并正确设置UIImageView上的图像。我的问题出现在试图清理我的UIView子类上的代码时 我正在

在my
UIView
subclass.h中:

@interface MyView : UIView
@property (nonatomic, strong) UIImageView *imageView;
@end
我正在我的
UIView
子类上设置
UIImageView
,如下(
init
方法):

因此,我可以执行
myView.imageView.image=[UIImage someImage]
并正确设置
UIImageView
上的图像。我的问题出现在试图清理我的
UIView
子类上的代码时

我正在尝试这样做:

- (UIImageView *)imageView {
    UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(5, 0, 34, 34)];
    imageView.layer.cornerRadius = CGRectGetWidth(profilePhotoImageView.frame) / 2.0f;
    imageView.layer.masksToBounds = YES;
    imageView.backgroundColor = [UIColor redColor];

    return imageView;
}
然后从
init
方法执行

[self addSubView:[self imageView]]

但是当我执行
myView.imageView.image=[UIImage someImage]
时,图像不会显示在UIImageView上


我忘记了什么?

当您命名方法imageView时,它会覆盖属性的getter。因此,每次调用它时,都会调用该方法并创建一个新的UIImageView


两者都调用您定义的方法,该方法返回一个新的UIImageView,而不是您在init中创建的UIImageView。

确保您的
imageView
getter方法正在获取已存储在实例变量
\u imageView
中的
UIImageView
实例。否则,每次调用
imageView
方法时,都会创建
UIImageView
的新实例,因此不会在实际添加到视图中的实例上设置图像

下面是您的
imageView
方法的外观:

- (UIImageView *) imageView {
    UIImageView *imageView = _imageView;
    imageView.layer.cornerRadius = CGRectGetWidth(profilePhotoImageView.frame) / 2.0f;
    imageView.layer.masksToBounds = YES;
    imageView.backgroundColor = [UIColor redColor];

    return imageView;
}

能否显示
imageView
getter方法的其余实现?请参考我的答案,了解如何根据更新的问题更改方法以解决问题。必须检查ivar以前是否已初始化。。。如果不只是像if一样创建(!\u imageView){{u imageView=[UIImageView alloc]init];}谢谢,@C_X!这为我指明了正确的方向,那么实例变量应该已经初始化了?您还可以将初始化
UIImageView
的代码移动到
imageView
getter方法中,这样它在需要之前根本不会被初始化。这将是延迟实例化。重要的是要记住,如果您选择延迟实例化,您只会创建一个新的
UIImageView
,如果它尚未创建。在创建一个新的并设置它的参数之前,你会做一个检查,比如
if(!\u imageView)
。是的,我就是这样做的,现在一切都正常了,我的类看起来干净多了:D
myView.imageView
[myView imageView]
- (UIImageView *) imageView {
    UIImageView *imageView = _imageView;
    imageView.layer.cornerRadius = CGRectGetWidth(profilePhotoImageView.frame) / 2.0f;
    imageView.layer.masksToBounds = YES;
    imageView.backgroundColor = [UIColor redColor];

    return imageView;
}