@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
,但它没有提供解决方案.
另一个想法是创建一个公共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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)