属性的小问题

来源:互联网 发布:无线串口软件 编辑:程序博客网 时间:2024/05/29 04:27

在OC中,为了方便我们设置访问器和设置器,有一个关键字来让程序自动产生getter和setter的方法,那就是@property的方法,在一开始使用这个方法使我的代码简洁了很多,直到有一次发生了一个问题,才让我真正明白这个@property的含义(也不一定是真正明白,至少明白多了一点),在同时使用继承和属性的时候发生了一点小问题。

我们先创建一个工程,工程里面再创建一个类,类中定义一个属性name和一个简单的sayHi方法

 #import <Foundation/Foundation.h>//Student.h @interface Student : NSObject{    NSString *_name;}@property (nonatomic,retain)NSString *name;-(void)sayHi;@end

然后在实现文件中实现sayHi方法

#import "Student.h"      //Student.m@implementation Student-(void)sayHi{    NSLog(@"大家好,我是%@",_name);}@end

然后我们在创建一个子类newStudent继承于Student。然后在重写newStudent的sayHi的方法时候出现了问题,就是不能够访问name了!

#import "NewStudent.h"@implementation NewStudent-(void)sayHi{   //NSLog(@"大家好,我是%@",_name);//这个时候_name报错}@end

当我把_name改变成为name的时候,依然出错了。
在当时我认为属性的本质也是一种方法而已,按道理来说应该是可以继承的,不过现在name居然不能访问,在网上百度了一阵,google了一阵之后依然没结果。由于一个契机(是什么忘了)突然想到,name的作用域的问题,再重新百度才查出来,
属性定义的实例变量是一个私有的变量,子类当然不能继承,所以才出错。额。。。。。。。半天时间就这样过去了

0 0