Ios 有没有更好的方法在OC中写入属性?
我有这样的属性:Ios 有没有更好的方法在OC中写入属性?,ios,objective-c,Ios,Objective C,我有这样的属性:@property(非原子、赋值、只读)CGRect帧
@property(非原子、赋值、只读)CGRect帧在example.h文件中,我认为该语句是告诉其他类frame属性是只读的,它还告诉编译器不需要合成setter方法。
这样说类本身可以在.m文件中使用实例变量_frame(self.frame仍然不能使用)对吗?如果是,是否有更好的方法使用此实例变量_frame?在类扩展中重新声明此属性以readwrite,或在类扩展中重新声明实例变量,如下所示(我发现许多人都这样编写,但我不明白这样做的好处是什么?)
或者我什么都不需要做?我对财产的理解如下:
1.当您使用点运算符(.)时,程序将在receiver类中查找属性名称。
如下所示:tt.frame(示例*tt=[[example alloc]init];)
2.然后程序查找属性名称(使用和属性名称相同的合成方法绑定)和实例变量之间的关系。
方法是:@synthesis frame=\u frame
(frame是属性的名称,_frame是实例变量。绑定属性的名称和实例变量。如果您不这样做,当您选择64位环境时,编译器将提供一个实例变量(frame,然后修改此frame,而不是您设计的_frame。)。或者,如果您选择32位环境,编译器将给您一个警告)
3.调用实际实例变量的方法。我不明白编译器已经为我提供了一个实例变量,为什么我要自己在类扩展中重新编写实例变量?
@interface example () {
CGRect _frame;
}
@end
@implementation example