Ios UIView的getter和setter
在myIos 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子类上的代码时 我正在
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;
}