OC基础语法<1.3> 入门面向对象语法-self、new、 @property和synthesize

来源:互联网 发布:淘宝精仿浪琴手表 编辑:程序博客网 时间:2024/05/26 02:55

一:变量的作用域                                                                                                           

默认是protected的

@public    全局都可以访问

@protected 只能在类内部和子类中访问

@private   只能在类内部访问

注意:私用方法的实现很简单,只需要实现在.m文件中,而没有在.h文件中声

二:self关键字                                                                                                               

在对象方法中 self代表你这个当前对象,相当于java中的this

- (void)text1{int age = self.age;}
在类方法中 self就代表这个类名,就是下面例子中调用text2这个方法的类
+ (void)text2{[Student alloc] = [self alloc]}
//总结在一起 , 就是谁调用这个方法self就指向谁无论是类还是对象

注意:不要在set,get中调用self,因为分辨不清楚容易造成死循环

三:new关键字                                                                                                       

new相当于即分配了内存,又实现了init构造方法

Student *stu = [[Student alloc]init];//相当于 Student *stu = [Student new];

我们现在一般用以前的语法,因为new是后来加入的,而且没有以前的语法层次清晰,

并且new的话没办法调用自己写的构造方法

四:@property和@synthesize                                                                                  

@property 关键字表示自动生成成员变量的set和get方法的声明,只用在@interface关键字里面

@property int age ; //相当于//-(void)setAge(int)age;//-(int)age;
@synthesize 关键字表示自动生成实现成员变量的set和get方法的实现,可连着一起写只用在@implementation 关键字里面

@synthesize age ,name 
@synthesize  age;/*相当于-(void)setAge(int)newAge{ age = newAge;}*/
为了防止混淆我们可以写成这样
@synthesize  age = _age;

注意!!!

1:编译器会先判断synthesize 关键字的存在,根据你定义的成员变量找同名的成员变量,具体如下

如果写了@synthesize  age;那么成员变量 int age;就可以可以省略了,系统找不到同名的成员变量,会自动生成一个同名变量,并且是私有的,相当于在.m文件中加了一个int age;就像本例中如果现在你在.h中定义了一个_age的成员变量,没有定义age,但是synthsize中的成员变量你写的是age 那么自动生成的成员变量会是age而不是_age
2:如果你写成了@synthesize  age = _age ,编译器会找_age这个成员变量,如果找不到就会自动生成,只不过是私有的(看不懂这句可参考下面)
现在的新版本synthesize我们也不用写 ,只需要在.h中声明一个变量,实现方法会自动生成

/*@property int age ;不写synthesize方法会默认生成@synthesize  age = _age;所以说他会自动生成的成员变量是_age,但是是私有的,如果想变成公共的就需要在继承类后面的{}中声明一下eg{int _age;}*/
总结:来说以后我们如果不确定的话最好不要在.h文件中把
{int _age;NSSting *_name;}
省略,这样synthesize 就会调用你这里面的成员变量,然后这个@synthesize关键字一开始最好不要省略,当然根据需求set和get方法有时也需要手动写

0 0