在Objective-C中覆盖延迟加载的属性getter

在Objective-C中覆盖延迟加载的属性getter,第1张

概述我通常懒惰地在他们的getter方法中实例化我的@property对象,如下所示: @interface MyGenericClass : UIViewController@property(nonatomic, readonly) UIImageView *infoImageView// ...@implementation GenericClass- (UIImageView *) 我通常懒惰地在他们的getter方法中实例化我的@property对象,如下所示:
@interface MyGenericclass : UIVIEwController@property(nonatomic,Readonly) UIImageVIEw *infoImageVIEw// ...@implementation Genericclass- (UIImageVIEw *)infoImageVIEw{    if (!_infoImageVIEw) {        _infoImageVIEw = [[UIImageVIEw alloc]initWithImage:[UIImage imagenamed:@"PlaceholderInfoImage"]];    }    return _infoImageVIEw;}

但是当子类化时,我经常想要覆盖一些@propertIEs以使其更具子类.所以我想改变实例化并执行以下 *** 作:

@interface MySpecificSubclass : MyGenericclass//...@implementation MySpecificSubclass- (UIImageVIEw *)infoImageVIEw{    if (!_infoImageVIEw) {        _infoImageVIEw = [[UIImageVIEw alloc]initWithImage:[UIImage imagenamed:@"SpecialinfoImage"]];    }    return _infoImageVIEw;}

但那是不可能的,因为子类无法访问_infoImageVIEw iVar.

我正在努力做坏事吗?
或者有一个共同的解决方案/最佳实践吗?我看到的唯一解决方案是让iVar公开,这感觉违反了封装原则……

感觉这是一个非常基本的问题,那里必须有数百万的答案,但在搜索了几个小时之后我才发现它是Objective-C: Compiler error when overriding a superclass getter and trying to access ivar
,但它没有提供解决方案.

解决方法 您可能希望将_infoImageVIEw声明为头文件中的受保护变量以及属性.
另一个想法是创建一个公共defaultimageVIEw方法来调用惰性getter.
像这样的东西:
@interface MyGenericclass : UIVIEwController@property (nonatomic,Readonly) UIImageVIEw *infoImageVIEw

@implementation Genericclass- (UIImageVIEw *)infoImageVIEw{    if (!_infoImageVIEw) {        _infoImageVIEw = [self defaultimageVIEw];    }    return _infoImageVIEw;}- (UIImageVIEw *)defaultimageVIEw{    return [[UIImageVIEw alloc] initWithImage:[UIImage imagenamed:@"PlaceholderInfoImage"]];}

@interface MySpecificSubclass : MyGenericclass

@implementation MySpecificSubclass- (UIImageVIEw *)defaultimageVIEw{    return [[UIImageVIEw alloc] initWithImage:[UIImage imagenamed:@"SpecialinfoImage"]];}
总结

以上是内存溢出为你收集整理的在Objective-C中覆盖延迟加载的属性getter全部内容,希望文章能够帮你解决在Objective-C中覆盖延迟加载的属性getter所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1254567.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存