欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iOS 同时重写父类属性的setter和getter时候报错

程序员文章站 2024-02-20 15:41:40
...

平时也没有怎么注意会报这个错误,因为平时都很少同时重写setter和getter方法,一般的话,我们大概都是使用懒加载方法,然后重写getter方法,做一个非空判断。然后有时候根据需求,要同时重写属性的setter和getter方法。

懒加载父类的firstInputView 的getter方法,我要重写界面一些控件
iOS 同时重写父类属性的setter和getter时候报错
这个时候需要使用@synthesize
iOS 同时重写父类属性的setter和getter时候报错

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方法进行操作,引用计数会随着不同的操作而改变,了解了这点后就能够更好的避免内存泄露问题。