初始化框架的未声明标识符

eng*_*zzy 3 objective-c

我正在尝试初始化一个框架。这是代码。我不明白为什么我从 Xcode 收到消息Undeclared identifier _frame。它在 .h 文件中,我在实现中用它的名字来调用它。我哪里错了?

#import <UIKit/UIKit.h>

@interface BNRHypnosisView : UIView

@property (nonatomic) CGRect _frame;

@end


#import "BNRHypnosisView.h"

@implementation BNRHypnosisView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];

    if (self) {
        _frame = frame;
    }

    return self;
}


@end
Run Code Online (Sandbox Code Playgroud)

das*_*ght 5

当您声明一个名为_frame(一个下划线)的属性时,Objective-C 会合成一个 getter、一个 setter 和一个名为__frame(两个下划线)的实例变量。将您的赋值更改为用于self._frame通过 setter 访问属性,或用于__frame直接访问变量:

if (self) {
    __frame = frame;
}
Run Code Online (Sandbox Code Playgroud)

更好的是,将属性重命名为不带下划线的名称,以与 Apple 推荐的属性命名方式保持一致。