您的位置:首页 > 运维架构

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

2014-11-25 00:43 246 查看

一:变量的作用域                          
                                                   
                            

默认是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方法有时也需要手动写
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  self new property synthesize