iOS 同时重写父类属性的setter和getter时候报错
平时也没有怎么注意会报这个错误,因为平时都很少同时重写setter和getter方法,一般的话,我们大概都是使用懒加载方法,然后重写getter方法,做一个非空判断。然后有时候根据需求,要同时重写属性的setter和getter方法。
懒加载父类的firstInputView 的getter方法,我要重写界面一些控件
这个时候需要使用@synthesize
1.对于property,可能是再熟悉不过的了,当我们需要定义声明一个属性的时候就要用到它。但是,让我们回想到一个最原始的类的创建,在objective-c中,类在默认情况下是protected的,也就是说,只有本类或者是有继承关系的类才能够拿到这个类的属性进行操作,那么,如果其他类想要操作这些属性就没有办法了。所以,如果我们需要这样的操作,那么就要在这个类里面为属性写上setter和getter方法,来为其他类提供一个类似于接口的东西来操作本类的属性,所以,最原始的类里面应该是这样写的:
@interface Student : NSObject
{
//age和gender这两个属性的声明
int age;
int gender;
}
//age的getter和setter方法声明
- (int)age;
- (void)setAge:(int)newAge;
//no的getter和setter方法声明
- (int)gender;
- (void)setGender:(int)newGender;
@end
但是,如果试想,一个类有100个属性,那么我们就得写100个getter和100个setter方法,那样的话,类里面的内容就会很庞大杂乱,所以,property的出现正是为了解决这个问题,相信大家也都理解到了property的作用,那就是用property声明的属性会自动去声明setter方法和getter方法,不用我们去手动书写。同时,也可以发现,使用property定义的属性,都可以为属性定义一些说明性的参数,比如我们常用的nonatomic,copy,assign等等。
2、接着是synthesize,大家最熟悉的应该是这两种写法(这里使用student代表任意一个属性)@synthesize student; 以及 @synthesize student = _student
其实,第一个写法等价于 @synthesize student = student,提完了这点,相信大家也都有所明白,有些开发者喜欢直接使用下划线加上属性名来进行操作,有些开发者喜欢使用self.student这种形式来书写,在ARC的机制下两者表面上的差别不是很大,但是有一点需要我们去理解清楚的是(这里说明的情况是xcode4.5以后的版本)synthesize的作用就是让student = ?中的后者这个变量来“代替”属性,从而可以通过操作变量来进行属性的操作,但是有一点最关键的是,使用变量进行操作,属性本身的引用计数是不会增加的,因为没有经过调用setter方法或者是getter方法。但是如果使用self.student这种操作方式的话,实质上是通过setter或者是getter方法进行操作,引用计数会随着不同的操作而改变,了解了这点后就能够更好的避免内存泄露问题。
上一篇: js静态方法和实例方法
下一篇: c++中结构体和类的区别