我在example.h文件中有这样的属性:@property (nonatomic, assign, readonly) CGRect frame;
,我认为这个语句是告诉其他类,frame属性是readonly,它还告诉编译器不需要合成setter方法。
是否可以说类本身可以在.m文件中使用实例变量_frame(self.frame仍然无法使用)?如果是这样,有没有更好的方法来使用此实例变量_frame?重新声明这个属性在类扩展中重写或重新声明类扩展中的实例变量,这样(我发现很多人都这样写,但我不明白这样做有什么好处?):
@interface example () {
CGRect _frame;
}
@end
@implementation example
或者我只是需要什么都不做?
答案 0 :(得分:0)
我对财产的理解如下: 1.程序在使用点运算符(。)时查找接收器类中的属性名称。 像这样:tt.frame(例子* tt = [[example alloc] init];)
2.然后编程找到属性名称(用合成方法同名作为属性名称绑定)和实例变量之间的关系。
方法是:@synthesize frame = _frame;
(框架是属性的名称,_frame是实例变量。属性和实例变量的绑定名称。如果你不这样做,编译器将提供一个实例变量(框架,然后修改这个框架,而不是你设计的_frame)。你选择64位环境。如果你选择32位环境,编译器会给你一个警告)
3.实例变量的调用方法。