在Modern Objective-C中覆盖setter和getter时访问生成的ivars时出错 [英] Error accessing generated ivars when I override setters and getters in Modern Objective-C

查看:136
本文介绍了在Modern Objective-C中覆盖setter和getter时访问生成的ivars时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我现在知道新的Objective-C编译器让您不再需要合成属性了。我有一个文件,里面有两个类。我的.h是一个简单的帮助类,如下所示:

I know now the new Objective-C compiler lets you not need to synthesize your properties anymore. I have one file that has two classes in it. My .h for a simple helper class looks like this:

@interface ViewFrameModel : NSObject

@property (nonatomic, strong) UIView *view;
@property (nonatomic, assign) CGRect frame;

- (id)initWithView:(UIView *)view frame:(CGRect)frame;

@end

在同一个.h文件中,我的其他课程(第2类),我有:

In the same .h file, for my other class (class 2), I have:

@property (nonatomic, strong) ViewFrameModel *viewFrameModel;

在2.m级,我可以这样做:

In class 2.m, I can do this:

- (void)setViewFrameModel:(ViewFrameModel *)viewFrameModel {
    _viewFrameModel = viewFrameModel;        
    [self pushViewFrameModel:viewFrameModel];
}

这个工作正常,没有来自编译器的投诉,但是,当我添加这个时:

This works fine with no complaints from the compiler, however, when I add this:

- (ViewFrameModel *)viewFrameModel {
    return _viewFrameModel;
}

我得到两个投诉,一个是第一种方法 setViewFrameModel

I get two complaints, one on the first method setViewFrameModel:


使用未声明的标识符_viewFrameModel,你的意思是viewFrameModel

"Use of undeclared identifier _viewFrameModel, did you mean viewFrameModel"

另一个返回 _viewFrameModel


使用未声明的标识符_viewFrameModel,您的意思是viewFrameModel
引用在封闭上下文中声明的局部变量viewFrameModel

"Use of undeclared identifier _viewFrameModel, did you mean viewFrameModel" "Reference to local variable viewFrameModel' declared in enclosing context"

当我添加

- (ViewFrameModel *)viewFrameModel {
    return _viewFrameModel;
}

方法?我想用一些自定义信息覆盖这个方法,但它在抱怨我: - 。思考? TIA。

method? I want to override this method with some custom info, but it's complaining at me :-. Thoughts? TIA.

推荐答案

如果同时覆盖setter和getter,编译器将不再为你自动创建实例变量。您可以将其添加到类实现中,如下所示:

If you override both the setter and the getter, the compiler will not automatically create the instance variable for you anymore. You can add it to your class implementation like so:

@implementation ClassName {
    ViewFrameModel *_viewFrameModel;
}
...
@end

这篇关于在Modern Objective-C中覆盖setter和getter时访问生成的ivars时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆